【问题标题】:Words regex in javajava中的单词正则表达式
【发布时间】:2013-12-03 09:00:39
【问题描述】:

我尝试编写正则表达式来检查字符串中是否包含某些单词,即onetwo 将是那些关键字。它们可以出现在句子的任何位置。

字符串不应该有任何数字,只有字母。如果它没有数字并且有onetwo 我应该返回true。

这是我的尝试:

^([one|two]*\D*[one|two]*)$

但这匹配空字符串或任何没有数字的字符串。如何稍微调整一下我的正则表达式?

【问题讨论】:

  • 我发现这个网站是一个很棒的正则表达式工具:rubular.com
  • 个人更喜欢gskinner.com/RegExr
  • 我正在使用 gskinner,但这不是我所要求的。谢谢

标签: java regex


【解决方案1】:

你在这里:

(?=^.*(one|two))\D+$

这里是 Java 代码:

    String input = "ajlfjalfd one jlafjldaj two jlkajfldja";

    final String REGEX_STR = "(?=^.*(one|two))\\D+$";
    Pattern regex = Pattern.compile(REGEX_STR);
    Matcher regexMatcher = regex.matcher(input);

    return regexMatcher.matches();

【讨论】:

  • 如果传递给matches,最后的$ 是多余的(它应该传递给matches)。如果传递给find,那么它就会损坏,因为它缺少初始的^
  • 您能解释一下为什么应该将它传递给匹配项吗?我使用了模式和匹配器。
  • 你使用的是Matcher#matches还是Matcher#find
  • 所以您使用的是matches。在这种情况下,$ 是多余的。
  • 你是对的。谢谢!但是我认为我们应该保留$,因为例如,您可以将正则表达式复制到其他工具以检查它是否匹配(我使用 Notepad++ 进行快速测试)。那么保持$ 会很有用。
【解决方案2】:

这样的事情应该可以工作:

^\D*?(\bone\b|\btwo\b)\D*?$

【讨论】:

    【解决方案3】:

    括号用于匹配字母,而不是单词。此外,星号用于表示 0 次或多次,它适用于空字符串是很自然的。

    我的建议?找到简单的解决方案使其发挥作用。您可以使用两个不同的正则表达式/one/ 检查“one”是否在字符串内,/two/ 检查“two”是否在字符串内。将两者结合起来,你就很好了(不是那么难,是吗?)。

    也许你会认为使用两个正则表达式很慢,但如果你关心这么简单的任务中的性能,你会首先使用 String#indexOf。

    【讨论】:

      【解决方案4】:

      我对正则表达式不太了解,

      You can use contains() method for finding one and two.
      e.g.  str.contains("one");
      
      
      then you can use regex to find whether it contains digits or not.
      

      【讨论】:

        【解决方案5】:

        试试看:.*(one|two).*

        String s = "hi , there are only two objects";
                String pattern = ".*(one|two).*";
                System.out.println(s.matches(pattern));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-05
          • 1970-01-01
          • 2013-07-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多