正则表达式匹配字符,除非中间有字符

时间:2013-06-19 12:11:57

标签: regex

我想使用一些正则表达式来匹配某些括号的内容和之后的文本直到某些空格,除非在到达该空格之前还有另一个开括号的情况。

例如以下内容:

- (NSArray *)componentsForRegularExpression:(NSString *)regex

(NSArray *)(NSString *)regex将匹配。

然而,使用我已经使用的正则表达式,正确地匹配(NSString *)regex,而不是仅匹配(NSArray *)它匹配我不希望它做的整个(NSArray *)componentsForRegularExpression:

我使用的正则表达式如下:

\(.*?\)[^\s|(]*

那么我如何使用正则表达式来实现这一点,以便始终匹配括号内容,但只匹配后面的内容(直到空白),只要没有另一个开放括号那段时间?

3 个答案:

答案 0 :(得分:3)

这个怎么样:

\(.*?\)([^\s(]*(?=\s|$))?

它匹配括号中的内容,然后可选地匹配任意数量的非空格非)字符,然后前瞻以匹配空格(或字符串结尾,以防它可能出现在字符串的结尾)。

请注意,|中不应有[](除非您想匹配|字符)。

Live demo(括号括起来并添加了非捕获组(?:))。

答案 1 :(得分:1)

这个正则表达式适合你:

(\([^)]*\)(?:(?![^(]*\()[^\s]*|))

现场演示:http://www.rubular.com/r/opurflXx2E

答案 2 :(得分:1)

我看到我得到了与@Dukeling完全相同的答案。但我设法避免懒惰匹配。

\([^)]+\)(?:[^\s(]*(?=$|\s))?