PHP Regex帮助(从preg_match_all转换为preg_replace)

时间:2012-04-25 20:02:44

标签: php regex

我在将一些正则表达式从preg_match_all中使用转换为在preg_replace中使用时遇到了一些困难。

基本上,仅通过正则表达式,我想匹配前面有空格,文本开头或者超文本的大写字符。这不是问题,我对此有以下效果:

preg_match_all('/(?<= |\A|-)[A-Z]/',$str,$results);
echo '<pre>' . print_r($results,true) . '</pre>';

现在,我想做的是使用preg_replace只返回符合上述条件的大写字符的字符串。如果我将正则表达式直接移植到preg_replace中,那么它显然会替换我想要保留的字符。

非常感谢任何帮助:)

另外,我完全清楚正则表达式在效率方面不是最好的解决方案,但是我想使用preg_replace。

2 个答案:

答案 0 :(得分:2)

根据De Morgan's laws
如果你想保留

字母
  • A-Z
  • 前面有[space]\A-

然后你想删除

字符
  • A-Z
  • 前面有[space]\A-

也许这个(用空字符串替换匹配)?

/[^A-Z]|(?<! |\A|-)./

请参阅example here

答案 1 :(得分:1)

我认为会是这样的:

$sString = preg_replace('@.*?(?<= |\A|-)([A-Z])([a-z]+)@m',"$1", $sString);