PHP Regex环顾四周帮助

时间:2011-08-17 07:56:51

标签: php regex

基本上我有一些文字如下:

{hello|hi} this {is really|is actually} great.

我想为preg_replace创建一个正则表达式,它将取代单词“really”,除了棘手的部分是我不希望这个单词在{}

之内

我一直在尝试使用正则表达式查看功能,但我只是无法完全获得一种语法,可以检查它是否在{但不是在}之前。

1 个答案:

答案 0 :(得分:2)

试试这个

(?<!{)([^{}\r\n]*?)really(?![^{\r\n]*})

并替换为

$1Replacement

here on Regexr

约束:

  • 没有嵌套括号
  • 没有不匹配的括号

一个问题是PHP只允许固定长度的后备,因此你必须用$1 + Replacement替换

断言背后的

(?<!{)负面看法,左边没有{

([^{}\r\n]*?)否定字符类,不允许{}和换行符(如果需要可以尝试)懒惰匹配0次或更多次,该组的内容存储在{{1 }}

$1否定前瞻断言不允许(?![^{\r\n]*})跟随}或换行符之间的错误。