【问题标题】:java Regular Expression to find exact word with special charactersjava正则表达式查找具有特殊字符的确切单词
【发布时间】:2013-08-02 15:29:33
【问题描述】:

下面的句子我需要搜索"$SE"关键字。

$SEBGI is there
there is $SE.
there is SE again

输出应该如下:

FALSE
TRUE
FALSE

我有以下正则表达式。

String patternStr =  "(?i)\\b"+Pattern.quote("$SE")+"\\b";

但它为所有句子返回FALSE

请帮忙。

【问题讨论】:

  • 显示你的代码,否则我们看不到你做错了什么。另外,你的要求不够明确。 ab$SE foo 应该是 true 还是 false
  • 请准确定义您想要考虑的单词边界。内置的\b 仅适用于纯字母数字“单词”。
  • 在你的“单词”的结尾中会不会有一个非字母数字字符(如$SE$)?

标签: java regex string expression


【解决方案1】:

你真的不需要这个词的边界。

我认为最简单的解决方案是再次使用非单词、“$SE”和非单词的序列。

例如:

String first = "$SEBGI is there";
String second = "there is $SE.";
String third = "there is SE again";
Pattern pattern = Pattern.compile("\\W\\$SE\\W", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(first);
System.out.println(matcher.find());
matcher = pattern.matcher(second);
System.out.println(matcher.find());
matcher = pattern.matcher(third);
System.out.println(matcher.find());

输出:

false
true
false

注意事项:

  • 我没有使用Pattern.quote,因为它只是一个“有问题的”字符 ($),所以我只是逃避了它。
  • 我没有使用后视或前瞻,因为在这种情况下并不真正需要它们。
  • 我没有使用分组,因为您没有尝试检索任何内容,只是检查String 是否包含Pattern 的匹配项。
  • 我已按照您的要求使用了 Pattern.CASE_INSENSITIVE 标志(请参阅您的 (?i) 标志 - 相同)。

【讨论】:

  • 感谢 Mena,它适用于这种情况。我已经更新了我的问题并添加了详细信息。能否请您审查并指导我。
  • @AnkurRaiyani 这不是 SO的工作原理。你的新问题看起来不错,但你不能从根本上改变原来的问题,并期望回答它的人也会更新他们的答案。我认为您应该回滚上一个问题,如有必要,将其关闭(或将其标记为“已回答”),然后提出一个新问题,这样每个人都有机会公平而清晰地回答这个新问题。
  • 好的,我已将它标记为答案并将创建新问题
【解决方案2】:

用途:

String example = "the charseq test";
String pattern = "(?i).*(^|\\s)" + Pattern.quote("charseq") + "($|\\s).*";
boolean matches = example.matches(pattern);

【讨论】:

    【解决方案3】:

    您始终可以使用 4 个单独的表达式:

    boolean str_beg = Pattern.matches("^\\$SE\\s", <input_str>);
    boolean str_mid = Pattern.matches("\\s\\$SE\\s", <input_str>);
    boolean str_end = Pattern.matches("\\s\\$SE$", <input_str>);
    boolean str_all = Pattern.matches("^\\$SE$", <input_str>);
    boolean matches = str_beg || str_mid || str_end || str_all;
    

    【讨论】:

      猜你喜欢
      • 2016-04-28
      • 2011-03-28
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多