如何使用正则表达式匹配单词列表。
就像我想要匹配
This is a apple
This is a orange
This is a peach
我尝试了This is a [apple|range|peach]
。
不起作用。
有什么想法吗?我已经发了5个小时,发布了“规则”,但没有详尽的例子,这些规则太神秘了。
答案 0 :(得分:5)
您可以使用
Pattern pattern = Pattern.compile( "This is a (apple|orange|peach)" );
Matcher matcher = pattern.matcher( "This is a orange" );
if( matcher.find() ) {
System.out.println( matcher.group( 1 ) );
}
答案 1 :(得分:1)
This is a ((?:(?:apple|orange|peach)/?)+)
将匹配
This is a apple/orange/peach.
无论订单如何。
您将只获得一个代表所有列表的捕获组 (这里是“苹果/橘子/桃子”)。
(?:apple|orange|peach)
'表示:匹配这三个术语中的一个,不捕获它(?:.../?)+
':匹配一个由'/'结束的字符串,多次匹配(...)
':捕获所有列表。这是一个苹果< -match这是一个橙色< -match这是一个桃子< -match这是一个香蕉< -no match。
This is a (apple|orange|peach)
就足够了:您尝试的[apple|orange|peach]
实际上是character class,并且会匹配任何'a','p','|','o'等等。
答案 2 :(得分:0)
我不确定Java正则表达式,但它会像
/(苹果|橙色|桃子)/
即,将它们分组,并使用|说'或'。
答案 3 :(得分:0)
试试这个:
String str = "This is a peach";
boolean matches = str.matches("(apple|orange|peach)");
如果使用模式,则可以使用
String str = "This is a peach";
Pattern pat = Pattern.compile("(apple|orange|peach)");
Matcher matcher = pat.matcher(str);
boolean matches = matcher.find();