我有这个正则表达式:
\[tag\](.*?)\[\/tag\]
它匹配两个标签之间的任何字符。匹配空内容或标记内仅包含空格的问题,例如:
[tag][/tag]
[tag] [/tag]
如何避免呢?使它至少与1个字符匹配,而不仅仅是空格。谢谢!
答案 0 :(得分:2)
使用
\[tag\](?!\s*\[\/tag\])(.*?)\[\/tag\]
^^^^^^^^^^^^^^^^
如果(?!\s*\[\/tag\])
是否定的超前查询,如果紧接当前位置右侧的空格有0+个空白,[/tag]
,则匹配失败。
答案 1 :(得分:2)
如果这是PCRE(或php),NP ++或Perl,请使用
(?s)(?:\[tag\]\s*\[/tag\](*SKIP)(?!)|\[tag\]\s*(.+?)\s*\[/tag\])
https://regex101.com/r/aCsOoQ/1
如果没有,您将无法使用Stribnetz regex,这是因为
您的要求很奇怪。
可读
(?s)
(?:
\[tag\]
\s*
\[/tag\]
(*SKIP)
(?!)
|
\[tag\]
\s*
( .+? ) # (1)
\s*
\[/tag\]
)
答案 2 :(得分:1)
您可以将表达式更改为类似于this的内容:
\[tag\]([\s\S]+)\[\/tag\]
,您可以向其添加一个量词,并将其与字符数绑定,类似于this expression:
\[tag\]([\s\S]{3,})\[\/tag\]
或者您可以对原始表达式做与this expression相同的操作:
答案 3 :(得分:1)