php - Preg 匹配不以 @ 开头的模式

标签 php regex

我有以下模式来匹配 {{ $name }} block

#{{2}(?:[^{}]*|(?R))+}{2}#

如果我在上面进行改进以忽略不包含 @ 的模式

#^(?:@){{2}(?:[^{}]*|(?R))+}{2}#

然后上面匹配

{{$abc}} @{{$name}}

但不是

@{{$name}} {{$abc}}

每行可以有任意数量的 block ,但以 @ 开头的 block 不应匹配。

最佳答案

您可以在原始正则表达式中使用负向后查找:

(?<!@){{(?:[^{}]*|(?R))+}}

RegEx Demo

(?<!@)当您有 @ 时,负后向断言会使匹配失败就在{{...}}之前.

关于php - Preg 匹配不以 @ 开头的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44860336/

相关文章:

c# - 这两个正则表达式术语是否会使用 C# isMatch() 方法找到相同的匹配项?

php - 在文本中搜索多个关键字

php - 使用冗余数据解析来自 Web 服务的信息

regex - Mongodb将重音字符匹配为基础字符

mysql - 使用正则表达式的 Flask SQLAlchemy 过滤器

regex - 如何在 Scala 中从较大的字符串中提取有效的电子邮件

php - html 在不工作后用 php 提交按钮

PHP Dom 文档 : getting textContent ignoring script tags and comments

php - Laravel 同步/附加标签

regex - ICU 中的 $ 匹配