如何在Java中为单行文本匹配多个正则表达式模式?

时间:2014-05-08 08:05:32

标签: java regex

假设我有多种模式P1,P2,P3 ,,等等。这些模式是不同的正则表达式模式,以匹配DATE的不同变体。

如何在一段代码中最有效地匹配相同的输入文本。

当然,我可以写一个for()来逐个循环遍历这些模式,但还有更好的方法吗?

5 个答案:

答案 0 :(得分:13)

我认为你可以使用正则表达式的|运算符,并将不同的正则表达式置于paranthesis中,以便将其视为一个匹配的正则表达式。

("(P1)|(P2)|(P3)")

答案 1 :(得分:7)

补充其他答案......

可以使用交替运算符编写一个难以阅读的大模式:

r1|r2|r3|...|rn

其中r1等本身就是“完全逃离”的正则表达式。

但是你必须要小心改变的顺序:第一个匹配胜利。也就是说,如果正则表达式引擎不是POSIX正则表达式引擎,但java.util.regex的引擎不是。

因此,对于文本catflap,请使用正则表达式:

cat|catflap

Java将匹配cat; POSIX正则表达式引擎将匹配catflap(最长,最左边的匹配)。

坚持使用更多个性化,可维护的模式是更好的选择。

答案 2 :(得分:0)

我不会使用Pattern来匹配日期。

您有DateFormatSimpleDateFormat个类来执行此操作。

这就是说,在Patterns的{​​{1}}表示中,可以使用交替|)运算符来组合String。 / p>

答案 3 :(得分:0)

您可以使用交替(|)运算符组合正则表达式的多个模式。

但是如果您有各种输入,则必须将它们从字符串转换为Date实例。然后,您必须按顺序进行操作并逐个验证输入。因此单个正则表达式可以验证输入,但不能用于任何其他逻辑。

答案 4 :(得分:0)

我有类似的问题。 将所有样式都放在一个样式中,并通过|将样式分开为我工作 '(((P1)|(P2)|(P3))'

我的参考代码:

<header>
  <form action='' id='search_bar'>
    <input type='text' name='search' id='ggg' />
    <input type='submit' name='submit_button' />
  </form>
  <div id='logo'>
    <img src='./img/flamingo.svg' />
    <a href='#'>Chirpify</a>
  </div>
  <div id='navigation'>
    <a href='#' class='profile'></a>
    <a href='#' class='msg'></a>
    <a href='#' class='noti'></a>
  </div>
</header>