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

时间:2013-07-04 09:38:53

标签: regex apex-code

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

我目前的正则表达式为"(.*)[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 个答案:

答案 0 :(得分: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)切换不区分大小写的匹配