【问题标题】:Regex find word Java case insensitive正则表达式查找单词Java不区分大小写
【发布时间】:2016-02-24 06:13:50
【问题描述】:

我想在列表中找到以下单词,但我无法在 java 中正确使用正则表达式。

Arduino,Katar,Bacardi

String keyWord = ar;
List<String> l = hubList.stream().filter(x -> x.matches("(?i)("+keyWord+")").collect(Collectors.toList();

【问题讨论】:

  • 试试x.matches("(?si).*"+keyWord+".*"),甚至x.matches("(?si).*\\Q"+keyWord+"\\E.*")
  • 我说得对吗,您想获取所有包含子字符串“ar”的字符串吗?
  • @FalcoWinkler 是的。第一个正则表达式有效!谢谢... \E 和 \Q 是什么意思?

标签: java regex string list filter


【解决方案1】:

要匹配字符串中的ar(您需要与matches() 匹配整个单词!)您需要允许关键字前后的任何符号。

由于 keyword 可能包含(可能)特殊的正则表达式字符(如( 或[),使用\Q...\E 运算符表示它们之间的字符被视为更安全文字字符。

因此,我建议

x.matches("(?si).*\\Q"+keyWord+"\\E.*")

如果不是这样,只会有字母:

x.matches("(?si).*"+keyWord+".*")

请注意,我还添加了 (?s) 单行修饰符以强制 . 匹配 任何 字符,甚至是换行符。

【讨论】:

  • 明白了,再次感谢,所以只有 (i) 表示不区分大小写?
  • 是的,(?i) 中的i 只是指定不区分大小写模式匹配的另一种方式。
猜你喜欢
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
相关资源
最近更新 更多