Regex 用于在BB代码(如标记)中查找属性的正则表达式

Regex 用于在BB代码(如标记)中查找属性的正则表达式,regex,Regex,我需要一个正则表达式的帮助,以确定像BB代码这样的标记是否包含属性 我有一个[col]代码,它可以具有类和桌面等属性。我想忽略所有具有桌面属性的文件 我想到的是: \[\bcol(?!\b.*桌面)。* 它适用于测试用例1和2,但如果它们在同一行上,则不适用于用例3。对于测试用例3,它应突出显示不带desktop属性的两列 测试用例: 1 [col class="blue" desktop=8] [/col] [col] [/col] 2 [col class="green"]

我需要一个正则表达式的帮助,以确定像BB代码这样的标记是否包含属性

我有一个[col]代码,它可以具有类和桌面等属性。我想忽略所有具有桌面属性的文件

我想到的是:
\[\bcol(?!\b.*桌面)。*

它适用于测试用例1和2,但如果它们在同一行上,则不适用于用例3。对于测试用例3,它应突出显示不带desktop属性的两列

测试用例:

 1
 [col class="blue" desktop=8]
 [/col]
 [col]
 [/col]

 2
 [col class="green"]
 [/col]
 [col desktop=8]
 [/col]
 [col]
 [/col]

 3
 [col class="gray"] Some Column [/col][col desktop=8 class="blue"]Another column[/col][col class="gray"]Column 3[/col]
你可以用

\[col\b(?!(?:(?!\[col\b).)*?\bdesktop=).*?\[/col]
请参阅。该模式需要点调用修改器,或将
替换为
[\s\s]

详细信息

  • \[col\b
    -一个完整的“单词”
    [col
  • (?!(?:(?!\[col\b.)*?\bdesktop=)
    -如果模式立即匹配到当前位置的右侧,则匹配失败的负前瞻:
    • (?:(?!\[col\b.)*?
      -任何不以整个单词开头的字符
      [col
      序列,零次或多次出现,尽可能少
    • \bdesktop=
      -一个完整的“单词”
      桌面=
  • *?
    -任何0+字符,尽可能少
  • \[/col]
    -a
    [/col]
    子字符串(在某些情况下,
    /
    需要转义)

(?s)\[col(?![^\[]*桌面)。*?\[/col\]


应该匹配除桌面之外的所有内容。请让我知道这是否有效,并解释正则表达式。

您可以尝试(使用dotall修饰符)@WiktorStribiżew,非常感谢!