我需要替换花括号(包括前缀)中的字符串中的所有空格。 示例:
发件人:x{Test test} test test x{Test test test } test {Test test}
致x{Test_test} test test x{Test_test_test } test {Test test}
(仅适用于x{}
-大括号包含x前缀时)
我可以在lookhead / lookbehind的帮助下完成此操作,但这在PHP / PCRE中不起作用
`(?<=x\{[^\{\}]+)\s+(?=[^\{\}]+\})`
问题是如何使PHP / PCRE与preg_replace函数兼容?
答案 0 :(得分:3)
您可以为此使用\G
基正则表达式:
$str = 'x{Test test} test test x{Test test test } test {Test test}';
$repl = preg_replace('/(?:x{|(?<!^)\G)[^\s}]*\K\s+(?!})/', '_', $str);
//=> x{Test_test} test test x{Test_test_test } test {Test test}
RegEx详细信息:
\G
在上一场比赛的末尾或首场比赛的字符串开头声明位置。(?:x{|(?<!^)\G)
:匹配x{
或上一个匹配结束\K
:重置当前比赛信息\s+
:匹配1个以上空白(?!})
:声明我们前面没有}