【问题标题】:Regular expression for multiple words with * and space带有 * 和空格的多个单词的正则表达式
【发布时间】:2015-09-22 07:34:40
【问题描述】:

我的正则表达式的格式是“Exit* Order*”。当我在 java 中使用时,它没有按预期工作。

String pattern = "Exit* Order*";
String ipLine = "Exiting orders";

匹配:否

String pattern = "Exit Order";
String ipLine = "Exit order";

匹配:是的。

Java 代码: 模式 patrn = Pattern.compile(pattern,Pattern.CASE_INSENSITIVE); 匹配器匹配 = patrn.matcher(ipLine);

谁能告诉我在这种情况下应该是什么模式。

【问题讨论】:

  • 请添加更多相关代码。注意,如果你真的使用正则表达式,你需要使用.*匹配0个或多个字符而不是换行符或\S*来匹配0个或多个非空白字符。
  • 谢谢!!我正在使用 java 正则表达式类。
  • 看看一些基本的正则表达式教程。你只是用错了。 * 不代表任何数量的任何字符。这意味着任何出现的前面的字符。

标签: java regex


【解决方案1】:

我相信您正在寻找类似的东西:

"Exit.* Order.*"

或者可能是 .* 的替代品,例如\S*, \w*, [A-Za-z]*.

您当前的正则表达式正在单词末尾查找零个或多个 t 和 r,例如它会匹配

Exi Orde
Exit Orde
Exitt Orde
Exi Order
Exi Orderr
...

【讨论】:

    【解决方案2】:
    Exit\\w* Order\\w*
    

    你应该使用这个。.* 可以匹配比预期的更多。使用i 或ignorecase 标志

    【讨论】:

    • \\w 会更好,所以你不匹配Exit^&%#$&^% Order)&^%&
    【解决方案3】:

    您似乎只想不区分大小写地匹配“退出订单”:

    试试这个:

    if (str.matches("(?i)exit order"))
    

    或者要将匹配限制在您的示例中,其中“Order”的“O”可能是“o”,请使用:

    if (str.matches("Exit [Oo]rder"))
    

    【讨论】:

      【解决方案4】:

      Java 不使用 Linux 正则表达式: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

      使用这个:

      String pattern = "Exit.* Order.*";
      

      【讨论】:

      • “Linux”正则表达式和 Java 正则表达式都使用.* 来表示“任意字符的任意次数出现”。区别不在于你所谓的“Linux regexp”
      猜你喜欢
      • 2016-11-29
      • 1970-01-01
      • 2015-09-10
      • 2018-06-12
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 2016-08-25
      • 1970-01-01
      相关资源
      最近更新 更多