我有一些针对很长字符串运行的正则表达式。然而,字符串中唯一与 RE 相关的部分是在开头附近。大多数 RE 类似于:
\\s+?(\\w+?).*
RE 捕获开头附近的几个组,并且不关心字符串的其余部分是什么。出于性能原因,有没有办法让 RE 引擎避免查看终止 .*
消耗的所有字符?
注意:带有 RE 的应用程序是使用 java.regex
类编写的。
编辑:例如,我有以下 RE:
.*?id="number"[^>]*?>([^<]+?).*
它针对存储为 StringBuilder
的大型 HTML 文件运行。带有 id="number"
的标记始终位于 HTML 文件的开头附近。
最佳答案
使用 java.util.regex 类时,有多种方法可以匹配给定的字符串。 Matcher.matches
始终与整个输入字符串匹配。 Matcher.find
在输入字符串的某处查找与正则表达式匹配的内容。最后,Matcher.lookingAt
将正则表达式与输入字符串的开头进行匹配。
如果您使用 Matcher.matches
,您可能需要在末尾添加 .*
来匹配整个字符串。但是,您可能最好使用其他方法之一,这样您就可以省略 .*
。听起来 Matcher.lookingAt
可能适合您的目的。
关于java - 是否可以将正则表达式简化为匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1220332/