替换大括号内字符串中的所有空格

时间:2018-12-30 10:56:28

标签: php regex preg-replace pcre

我需要替换花括号(包括前缀)中的字符串中的所有空格。 示例:

发件人: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函数兼容?

1 个答案:

答案 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 Demo

RegEx详细信息:

  • \G在上一场比赛的末尾或首场比赛的字符串开头声明位置。
  • (?:x{|(?<!^)\G):匹配x{或上一个匹配结束
  • \K:重置当前比赛信息
  • \s+:匹配1个以上空白
  • (?!}):声明我们前面没有}