将字符串与多个正则表达式模式匹配

Pat*_*tan 17 java regex

我有一个输入字符串.

我正在考虑如何有效地将此字符串与多个正则表达式匹配.

Example Input: ABCD
Run Code Online (Sandbox Code Playgroud)

我想与这些注册模式进行匹配,true如果至少其中一个匹配,则返回:

[a-zA-Z]{3}

^[^\\d].*

([\\w&&[^b]])*
Run Code Online (Sandbox Code Playgroud)

我不确定如何一次匹配多个模式.有人可以告诉我,我们如何有效地做到这一点?

Mar*_*nik 22

如果你只有几个正则表达式,并且它们在编译时都是已知的,那么这就足够了:

private static final Pattern
  rx1 = Pattern.compile("..."),
  rx2 = Pattern.compile("..."),
  ...;

return rx1.matcher(s).matches() || rx2.matcher(s).matches() || ...;
Run Code Online (Sandbox Code Playgroud)

如果它们中有更多,或者它们是在运行时加载的,那么使用模式列表:

final List<Pattern> rxs = new ArrayList<>();


for (Pattern rx : rxs) if (rx.matcher(input).matches()) return true;
return false;
Run Code Online (Sandbox Code Playgroud)

  • 最有效的方法是什么:多个匹配器或通过管道连接的多个模式? (9认同)

van*_*ale 19

你可以用一个大的正则表达式:

[a-zA-Z]{3}|^[^\\d].*|([\\w&&[^b]])*
Run Code Online (Sandbox Code Playgroud)

  • @MarkoTopolnik 感谢您的更正,不确定 | 的优先级 所以为了安全起见我把它包在括号里 (2认同)
  • 由于parens也意味着群体捕获,他们应该小心对待. (2认同)