正则表达式匹配括号内的字符串没有空格周围
问题描述:
我使用正则表达式如下匹配括号内的字符串:正则表达式匹配括号内的字符串没有空格周围
\((.*?)\)
但是,这符合这样的:
(word)
这也太:
(word)
我需要修改它只匹配第一种情况:括号内没有空格的词:(word)
任何想法?
在此先感谢
答
使用lookahead/lookbehind左括号后和右括号前禁止空间:
\((?!\s)[^()]+(?<!\s)\)
(?!\s)
和(?<!\s)
意味着“不跟/不前面有一个空格”。
中间的部分[^()]+
要求在圆括号之间存在一个或多个字符,不允许有()
匹配。
+0
值得注意的是,javascript不支持lookbehind。所以取决于环境,这将会或不会工作。 –
答
可以使用此图案:
\([^\s()](?:[^()]*[^\s()])?\)
[^\s()]
确保第一字符不是空格或括号(和使强制至少一个字符)。
(?: [^()]* [^\s()])?
是可选的。如果匹配,相同的字符类可确保最后一个字符不是空格。
什么'(字词字词2)',这应该匹配? '()'怎么样,应该允许吗? – dasblinkenlight
对'(word1 word2)'有效。不要只是'()'。 – user1991185