用于在类似BB代码的标签中查找属性的正则表达式

时间:2017-09-26 18:19:48

标签: regex

我需要一个正则表达式的帮助来弄清楚类似BB代码的标签是否包含属性。

我有一个[col]代码,可以将属性作为类和桌面。我想忽略所有具有桌面属性的人。

我提出的那个是: \[\bcol(?!\b.*desktop).*

适用于测试用例1和2,但如果它们位于同一行,则无法用于案例3。对于测试用例3,它应突出显示没有桌面属性的两列。

测试案例:

 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]

2 个答案:

答案 0 :(得分:1)

您可以使用

\[col\b(?!(?:(?!\[col\b).)*?\bdesktop=).*?\[/col]

请参阅regex demo。该模式需要DOTALL修饰符,或将.替换为[\s\S]

<强>详情

  • \[col\b - 一整个“字”[col
  • (?!(?:(?!\[col\b).)*?\bdesktop=) - 如果模式立即与当前位置的右侧匹配,则表示匹配失败:
    • (?:(?!\[col\b).)*? - 任何字符串没有开始整个单词[col序列,零次或多次出现,尽可能少
    • \bdesktop= - 一整个“字”desktop=
  • .*? - 任意0个字符,尽可能少
  • \[/col] - 一个[/col]子字符串(在某些情况下,/需要转义)。

答案 1 :(得分:1)

https://regex101.com/r/5esnbe/1

(?s)\[col(?![^\[]*desktop).*?\[/col\]

应匹配除desktop列之外的所有列。如果有效,请告诉我,将解释正则表达式。