2013-07-04 84 views
0

我正在构建一个正则表达式,它将帮助我识别匹配的第一个匹配项。正则表达式仅用于匹配第一次匹配的匹配

我现在的正则表达式是"(.*)[Cc][Aa][Ss][Ee][^a-zA-Z\\d]*(\\d\\d*)[^a-zA-Z\\d]*(.*)"

我所试图做的是找到,如果输入的字符串包含单词“案例”(不区分大小写),然后任意数量的特殊字符,后面跟一个数字; 我想检索文本的3个部分。 说我的输入字符串是"RE: FW: case:-1234: there is some description" 使用此正则表达式,我能够检索,"RE: FW: ""1234""there is some description"

这是正常的,但如果我输入的字符串 "RE: FW: case:-1234: This is in reference to case 789 reopening" 然后我正则表达式的回报,"RE: FW: case:-1234: This is in reference to""789""reopening"

我想得到的是"RE: FW: ""1234","This is in reference to case 789 reopening"

我是一个正则表达式的新手,所以任何帮助,非常感谢。

注:我正在研究一个基于java的工具,所以java兼容的正则表达式会很好。

回答

1

使用(?i)不区分大小写的匹配时你的正则表达式已经对整个字符串匹配(即做它使用matches)?如果没有(或者你可以选择使用find代替)只需卸下(.*),因为这是你的推背匹配:

[Cc][Aa][Ss][Ee][^a-zA-Z\\d]*(\\d\\d*)[^a-zA-Z\\d]* 

否则,使领先的重复非贪婪;

(.*?)[Cc][Aa][Ss][Ee][^a-zA-Z\\d]*(\\d\\d*)[^a-zA-Z\\d]*(.*) 

顺便说一下,您可以使用不区分大小写的匹配来简化此操作。如果你不能在你的工具中激活它,你可以在正则表达式中使用它:

(?i)(.*?)case[^a-z\\d]*(\\d+)[^a-z\\d]*(.*) 

请注意,我也简化了数字。 +表示发生1次或多次。

+0

感谢您的快速响应。它完美的作品 – jerunjose

0

你失踪?

你的正则表达式将是

(?i)(.*?)case[^a-z\d]*(\d+)(.*) 

您可以切换在正则表达式