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

标签 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 兼容的正则表达式会很好。

最佳答案

您的正则表达式是否必须匹配整个字符串(即它是否使用 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 次或多次。

关于正则表达式只匹配到第一次出现类匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17466927/

相关文章:

java - 如何将正则表达式与 String.split() 一起使用

ruby-on-rails - Rails 正则表达式警告 : character class has '-' without escape

salesforce - Visualforce 中的 Apex SOQL 子查询

salesforce - 顶点 :commandButton in visualforce component does not call controller method

javascript - 无法在屏蔽的电话号码中通过退格键删除

python - 将 re 中的 € 符号与 python 匹配

用于解析版本字符串并查看固定宽度的Python正则表达式

triggers - Apex 触发器有效,无法获得测试通过

javascript - 从 javascript 动态更改自定义组件属性值

salesforce - 使用 REST API 获取 Salesforce 对象的可访问字段