Java模式匹配器找到多个字符串

时间:2013-01-07 10:58:20

标签: java regex

我正在使用Pattern.compile()来查找文本字符串是否包含其他两个字符串。但它必须采用一种正则表达式。

例如,字符串中必须包含“StringOne”和“StringTwo”。

我可以Pattern.compile("(StringOne StringTwo|StrinTwo StringOne"),但两个字符串都很长,我想知道我是否可以压缩它。

如果我"(StringOne )?StringTwo( StringOne)?",它将匹配“StringTwo”和“StringOne StringTwo StringOne”。

2 个答案:

答案 0 :(得分:0)

使用此正则表达式:

^(?=.*\\bStringOne\\b)(?=.*\\bStringTwo\\b)

这使用两个预测来锚定输入开始以断言两个字符串出现某处

编辑: 在字符串的末尾添加了单词边界\b以防止一个字符串在另一个字符串中匹配,尽管这不是问题的明确要求。

答案 1 :(得分:0)

存在速度问题。 您可以使用前瞻来完成此任务,但速度方面成本很高。在长串上看起来非常广泛。

如果字符串很长,则更快的方法是进行两次单独的匹配。

如果您确实需要这样做,请使用原始方式string A string B|String B String A