当前位置: 首页 > 知识库问答 >
问题:

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

林弘壮
2023-03-14

我正在使用Pattern.compile()来查找一个文本字符串是否包含另外两个字符串。但是它需要在一个正则表达式模式中。

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

我可以做< code > pattern . compile("(string one string two | string two string one "),但是两个字符串都很长,我想看看能不能压缩它。

如果我做< code >(string one)?StringTwo( StringOne)?”它将匹配“StringTwo”和“StringOne StringTwo StringOne”。

共有2个答案

刘意
2023-03-14

还有速度的问题。你也许可以使用前瞻来完成这个任务,但是速度方面代价很高。lookaheads在长字符串上确实是可扩展的。

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

如果你真的需要做一个,用你原来的方式< code > String A String B | String B String A

岳毅
2023-03-14

使用此正则表达式:

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

这使用锚定到输入开始的两个前瞻来断言两个字符串都出现在某个地方

编辑:在字符串末尾添加单词边界< code>\b,以防止一个字符串与另一个字符串匹配,尽管这并不是问题中规定的要求。

 类似资料:
  • 问题内容: 我想在输入字符串中搜索给定的字符串模式。 例如 现在,我需要搜索字符串URL是否包含“ ”。请帮我。 这是一个例子。实际上,我需要检查URL是否包含匹配“ / {a-zA-Z0-9} /”的字符串。 问题答案: 您可以为此使用类。如果您只想在中匹配单词字符,则可以使用以下正则表达式。是的简写。如果您可以,请使用或。

  • 这是一个示例文本:。我无法修改输入文本,我正在从文件中读取长字符串文本。 我想提取以下内容:,,, 为此,我编写了以下正则表达式模式: 我正在使用和类,但是我的Matcher无法使用前面提到的正则表达式找到模式。我在一些在线regex网站上用文本测试了这个regex,令人惊讶的是,它在那里工作。 我哪里做错了? 原始代码: 输出:未打印任何内容

  • 问题内容: 我有一个输入字符串。 我正在考虑如何有效地将此字符串与多个正则表达式匹配。 我想针对这些正则表达式模式进行匹配,如果其中至少一种匹配则返回: 我不确定如何一次匹配多种模式。有人可以告诉我我们如何有效地做到这一点吗? 问题答案: 如果只有几个正则表达式,并且在编译时都知道它们,那么这就足够了: 如果它们更多,或者它们在运行时加载,则使用模式列表:

  • 问题内容: 我想同时执行完全的单词匹配和部分的单词/子字符串匹配。例如,如果我搜索“男士剃须刀”,那么我应该能够在结果中找到“男士剃须刀”。但是,如果我搜索“剃须刀”,那么在结果中我也应该能够找到“剃须刀”。我使用以下设置和映射: 索引设置: 对应: 插入记录: 查询: 1.按完全匹配的词组进行搜索- >“男式” 上面的查询在返回结果中返回“男士剃须刀”。 2.按部分单词匹配搜索- >“ en’s

  • 如何检查字符串是否与此模式匹配? 大写字母,数字,大写字母,数字。。。 例如,这些将匹配: 这些不会(“^”表示问题)

  • 问题内容: 更新: 感谢您的所有好评!我尝试了许多不同的正则表达式模式,但不明白为什么m.matches()没有执行我认为应该做的事情。当我改用 m.find() 以及调整正则表达式模式时,我能够到达某个地方。 我想匹配Java字符串中的模式,然后使用正则表达式(如Perl的$&运算符)提取匹配的部分。 这是我的源字符串“ s”: 我要提取“ America / Mexico_City”部分。 我