我需要一个正则表达式的帮助来弄清楚类似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]
答案 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
列之外的所有列。如果有效,请告诉我,将解释正则表达式。