例如:
String s= "Hello every one !! ";
现在我想检查字符串是否以
开头Hello
Hi
Hey
然后返回true?
答案 0 :(得分:1)
您可以在正则表达式中使用Negative Lookahead,如下所示:
这是针对JavaScript的
/^(?!Hello|Hi|Hey).+/gm
将匹配
下面的4和8行^ - 开始
行(?!) - 从表达式中的当前位置开始,确保给定的模式不匹配。不消耗字符。 在您的情况下,“Hello”或“Hi”或“Hey”表达式 Hello | Hi |嘿表示:匹配字符Hello字面(区分大小写)或匹配字符Hi字面意思(区分大小写)或匹配字符Hey字面意思(区分大小写)
。+ - 在一次和无限次之间匹配任何字符(换行符除外),尽可能多次,例如整个
m 修饰符:多行。导致^和$匹配每一行的开头/结尾(不仅是字符串的开头/结尾)( 如果匹配字符串则不需要 )
g 修饰符:全局。所有匹配(首次匹配时不返回)( 如果匹配字符串则不需要 )
P.S。你可以使用比特更短的版本
/^(?!H(ello|i|ey)).+/gm
P.P.S。这些示例也适用于Ruby,Python和PHP
答案 1 :(得分:0)
有意使用正则表达式,它将是:
^(Hello|Hi|Hey)
假设你想要Java(带上面的正则表达式):
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
System.out.println("If it is case sensitive:\n");
String[] strings = new String[] {
"Hello world!", "Hi world!", "Hey world!",
" Hello world!", " Hi world!", " Hey world!",
"hello world!", "hi world!", "hey world!" };
for (String string : strings) {
Pattern pattern = Pattern.compile("^(Hello|Hi|Hey)");
Matcher matcher = pattern.matcher(string);
System.out.println(string + " ==> "
+ (!matcher.find() ? "ok" : "not ok"));
}
System.out.println("\nIf it is case insensitive:\n");
for (String string : strings) {
Pattern pattern = Pattern.compile("^(Hello|Hi|Hey)",
Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(string);
System.out.println(string + " ==> "
+ (!matcher.find() ? "ok" : "not ok"));
}
}
}
这仅演示了正则表达式模式匹配器如何在Java中工作。
要使其成为返回布尔值的方法,请自行尝试。
答案 2 :(得分:0)
如果字符串不是以您列出的任何单词开头,则以下正则表达式返回true。
\A(?!Hello|Hi|Hey).*?{1}
这种方式的工作原理是
\A
- 检查是否'您好'是字符串
!?
- 是一个负面的预测,我认为它在所有正则表达式实现中都受支持
((Hello|Hi|Hey).*?){1}
- 匹配由|分隔的单词之一符号
一旦我们找到匹配的字词,我们就会采取负面的预测来实现' 不符合'逻辑。