PHP正则表达式环顾四周帮助

PHP正则表达式环顾四周帮助,php,regex,Php,Regex,基本上,我有一些文本如下所示: {hello|hi} this {is really|is actually} great. 我想为preg_replace创建一个正则表达式,它将替换单词“really”,但棘手的是我不希望单词位于{}之内 我一直在尝试使用regex环顾功能,但我就是无法找到一个语法来检查它是否在{但不是在a}之前。试试这个 (?<!{)([^{}\r\n]*?)really(?![^{\r\n]*}) 看到了吗 约束条件: 没有嵌套的括号 没有不匹配的括号 一个

基本上,我有一些文本如下所示:

{hello|hi} this {is really|is actually} great.
我想为preg_replace创建一个正则表达式,它将替换单词“really”,但棘手的是我不希望单词位于{}之内

我一直在尝试使用regex环顾功能,但我就是无法找到一个语法来检查它是否在{但不是在a}之前。

试试这个

(?<!{)([^{}\r\n]*?)really(?![^{\r\n]*})
看到了吗

约束条件:

  • 没有嵌套的括号
  • 没有不匹配的括号
一个问题是PHP只允许固定长度的查找,因此您必须用
$1+替换来替换

(?否定的查找后断言,左边没有
{

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


(?![^{\r\n]*}
否定的前瞻性断言不允许
}
后跟
{
或中间的换行字符sin。

你能在你的语法中使用
{hello | hy | day | goobye}
{hy hello | good | bad}
吗?这就是我想要的!谢谢:)
$1Replacement