我有类似下面的字符串:正则表达式 - 捕捉所有重复的组
@[email protected] text [email protected]@another optional text here etc
包含内部@[email protected]
字符串。
我想捕获所有这些“变量”成组通过一个正则表达式匹配,但现在看来似乎是不可能的,因为正则表达式只返回最后捕获的组,而重复。
我有类似下面的字符串:正则表达式 - 捕捉所有重复的组
@[email protected] text [email protected]@another optional text here etc
包含内部@[email protected]
字符串。
我想捕获所有这些“变量”成组通过一个正则表达式匹配,但现在看来似乎是不可能的,因为正则表达式只返回最后捕获的组,而重复。
你是对的;大多数正则表达式风格,包括Java,都不允许访问重复捕获组的单个匹配。 (Perl 6和.NET确实允许这样做,为了记录,但这不能帮助你)。
还有什么可以做什么?
Pattern regex = Pattern.compile("@[^@][email protected]");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
// matched text: regexMatcher.group()
// match start: regexMatcher.start()
// match end: regexMatcher.end()
}
,将捕获@[email protected]
,@[email protected]
等一个接一个。
如果您知道的是,隔板将是@
,那么为什么不直接使用split方法(string.split('@')
)?
这不是一个分离器它是一个启动属性/占位 –
/结束“标签”那么,在这种情况下,不能你的'split'无论如何,遍历结果数组并捕获属性名称和可选的文本? – 2011-07-26 20:23:51
你怎么能在下面的事例哪一个是属性,哪一个是文本:“@ property @ text”和“text @ property”.Split给你[“property”,“text”]或[“text”,property“]。 –
要小心,你可能想'@^@] + @'而不是'@ + @' – sidyll
我忘了正确的版本,它应该是“@。+?@ –