我创建了以下正则表达式代码来查找和分隔单词中的首字母大写。
$string = "hello worldB. What are you doing now";
$string = "hello worldB.What are you doing now"; // variant 2
$clean = preg_replace('/[a-z0-9]+(?:[A-Z].+)/', '? ', $string);
存在正则表达式错误。你能帮我吗?
答案 0 :(得分:2)
在您的正则表达式中,点不转义并且与除换行符以外的任何字符匹配。另外,(?:[A-Z].+)
是一个非捕获组,其模式正在使用。您要么需要一个捕获组,然后替换就应该包含对该组的反向引用,或者是一个先行的非消耗型模式。
您可以使用
$s = preg_replace('~[a-z0-9](?=[A-Z]\.)~', '$0 ', $s);
请参见regex demo。
详细信息
[a-z0-9]
-小写的ASCII字母(?=[A-Z]\.)
-(positive lookahead),后跟一个大写ASCII字母和一个点。请注意,$0
是正则表达式找到的整个匹配值的占位符。
答案 1 :(得分:1)
我猜测我们可能需要一个空格,可以使用以下方式完成该操作:
([a-z])([A-Z])
在这里,如果可能的话,我们不会从右边装订它。
$re = '/([a-z])([A-Z])/m';
$str = 'hello worldB. What are you doing now
hello worldB.What are you doing now
';
$subst = '$1 $2';
$result = preg_replace($re, $subst, $str);
echo "The result of the substitution is ".$result;
如果我们只想捕捉到这一点,我们可以使用以下简单表达式:
[a-z]([A-Z])
或
[a-z]([A-Z])\.
$re = '/[a-z]([A-Z])/m';
$str = 'hello worldB. What are you doing now
hello worldB.What are you doing now
';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
如果不需要此表达式,并且希望对其进行修改,请访问regex101.com上的此链接。
jex.im可视化正则表达式:
答案 2 :(得分:0)