Php 复杂的正则表达式。如何在多个阶段执行
以下是我将要筛选的内容:Php 复杂的正则表达式。如何在多个阶段执行,php,regex,Php,Regex,以下是我将要筛选的内容: YO_{ YO_{ YO_{ McDonalds. } } } 现在,我想过滤掉YO{和}之间的文本。我这样做: $another_var = preg_replace_callback( '/YO\_\{(.*?)\}/s', function($matches) { return $matches[1]; }, $variable_where_t
YO_{
YO_{
YO_{
McDonalds.
}
}
}
现在,我想过滤掉YO{和}之间的文本。我这样做:
$another_var = preg_replace_callback(
'/YO\_\{(.*?)\}/s',
function($matches) {
return $matches[1];
},
$variable_where_the_content_is_stored
);
但它正在回归:
YO_{
YO_{
McDonalds.
}
}
而不是返回麦当劳
如何允许筛选过程(regex)经历多个阶段
代码只是一个示例,并且只使用了我试图构建的概念。实际代码要复杂得多,可能会造成混乱。我只需要经历多个过滤阶段的想法
谢谢!:) 以下是工作代码:检查内部的注释以获得修复
print preg_replace_callback(
'/.*YO\_\{\s*([^}]*?)\s*\}.*/s', // mistake 1 check \s*([^}]*?)\s* and .*
function($matches) {
return $matches[1]; // mistake 2
},
$variable_where_the_content_is_stored
);
但是,您也可以使用preg\u match()
您可能想看看递归正则表达式。看见php的最新版本确实支持递归正则表达式。实际上,您可以将正则表达式稍作修改,然后使用match:
YO_\{[^{}]+\}
[^{}]+
将匹配非{}
字符
如果希望内部文本不带空格,可以使用:
YO_\{\s*([^{}]+?)\s*\}
并提取包含匹配项的数组的第一个元素。您可以将其与负前瞻一起使用:
$str = <<< EOF
YO_{
YO_{
YO_{
McDonalds.
}
}
}
EOF;
if (preg_match('/ YO_ (?!.*?YO_) \{ ( (?: [^{}]* | (?0) )* ) \} /sx', $str, $arr))
echo(trim($arr[1])); // McDonalds.
$str=对我来说,这看起来像是一种实际的可解析数据格式,比如JSON。你可能想考虑实际使用其他解决方案比使用RexEclipse好,但我不知道这比什么更好?“YO_{\s*(.*?\s*}
中存在一些问题,即它不一定强制使用匹配括号。
$str = <<< EOF
YO_{
YO_{
YO_{
McDonalds.
}
}
}
EOF;
if (preg_match('/ YO_ (?!.*?YO_) \{ ( (?: [^{}]* | (?0) )* ) \} /sx', $str, $arr))
echo(trim($arr[1])); // McDonalds.