正则表达式匹配只到第一次出现类匹配。

3
我希望构建一个正则表达式,以帮助我识别第一个匹配项。
我的目前的正则表达式是"(.*)[Cc][Aa][Ss][Ee][^a-zA-Z\\d]*(\\d\\d*)[^a-zA-Z\\d]*(.*)"
我正在尝试查找输入字符串中是否包含单词"case"(不区分大小写),后跟任意数量的特殊字符,然后是数字。 我希望检索文本的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兼容的正则表达式。
2个回答

2
你的正则表达式是否必须匹配整个字符串(即是否使用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

你缺少了

你的正则表达式应该是

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

在正则表达式中,您可以使用(?i)来切换不区分大小写的匹配。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接