公告
财富商城
积分规则
提问
发文
2019-04-04 00:46发布
疯言疯语
How can I replace a set of words that look like:
SomeText
to
Some_Text
?
The simplest way to do this is with a regular expression replacement.
For example:
substr(preg_replace('/([A-Z])/', '_$1', 'SomeText'),1);
The substr call there is to remove a leading '_'
$s1 = "ThisIsATest"; $s2 = preg_replace("/(?<=[a-zA-Z])(?=[A-Z])/", "_", $s1); echo $s2; // "This_Is_A_Test"
Explanation:
The regex uses two look-around assertions (one look-behind and one look-ahead) to find spots in the string where an underscore should be inserted.
(?<=[a-zA-Z]) # a position that is preceded by an ASCII letter (?=[A-Z]) # a position that is followed by an uppercase ASCII letter
The first assertion makes sure that no underscore is inserted at the start of the string.
This can easily be achieved using a regular expression:
$result = preg_replace('/\B([A-Z])/', '_$1', $subject);
a brief explanation of the regex:
Then we replace with '_$1' which means replace the match with an [underscore + backreference 1]
$result = strtolower(preg_replace('/(.)([A-Z])/', '$1_$2', $subject));
Converts:
HelloKittyOlolo Declaration CrabCoreForefer TestTest testTest
To:
hello_kitty_ololo declaration crab_core_forefer test_test test_test
<?php $string = "SomeTestString"; $list = split(",",substr(preg_replace("/([A-Z])/",',\\1',$string),1)); $text = ""; foreach ($list as $value) { $text .= $value."_"; } echo substr($text,0,-1); // remove the extra "_" at the end of the string ?>
最多设置5个标签!
The simplest way to do this is with a regular expression replacement.
For example:
The substr call there is to remove a leading '_'
Explanation:
The regex uses two look-around assertions (one look-behind and one look-ahead) to find spots in the string where an underscore should be inserted.
The first assertion makes sure that no underscore is inserted at the start of the string.
This can easily be achieved using a regular expression:
a brief explanation of the regex:
Then we replace with '_$1' which means replace the match with an [underscore + backreference 1]
$result = strtolower(preg_replace('/(.)([A-Z])/', '$1_$2', $subject));
Converts:
To: