正则表达式找到两个字符之间的内部匹配

时间:2014-02-19 16:49:08

标签: java regex

环境:Java

我想匹配两个字符串之间的字符,这是一个例子

foo <bar <foo@bar.com> xoo <xoo@bar.com>

我需要两个字符串:foo@bar.com和xoo@bar.com

我正在使用这个正则表达式:

  (。*?);

&LT&GT;

但这让我回头了

bar <foo@bar.com

xoo@bar.com

所以基本上我想匹配两个字符串之间的字符,但我需要内部字符。

非常感谢任何帮助?

3 个答案:

答案 0 :(得分:3)

您可以使用此基于否定的正则表达式进行匹配:

<[^<>]*>

在线演示:http://regex101.com/r/mT2pQ3

或使用lookarounds仅向您发送电子邮件:

(?<=<)[^<>]*(?=>)

答案 1 :(得分:3)

使用以下正则表达式:

<([^<>]+)>

捕获组应返回所需的字符串。

你的正则表达式的问题在于你没有考虑到在开始<之后遇到另一个 <字符的可能性。您的正则表达式与<匹配,然后匹配任何字符(非贪婪)的零或更多,后跟>。但.*部分也会与另一个<匹配。因此,您希望基本匹配以<开头的字符串,然后只包含 <>以外的字符,最后以{{1}结尾}。

以下是一些示例代码:

>

您可以在Java here中看到这一点。

答案 2 :(得分:1)

≤([^&LT;&GT;] *)&GT;会做的。

自“。”算术ANYTHIN(也是“&lt;”和“&gt;”)“bar”。 通过使用“[^&lt;&gt;]”你会说出任何东西(比如“。”)但是广场内的字符 - 在帽子之后。

一个测试RegEx的好网站是http://www.regexr.com/:)