正则表达式只匹配字符串与问号

时间:2012-11-13 14:56:11

标签: regex escaping

我怎样才能编写一个匹配仅包含问号

的字符串的正则表达式

“???” >真

“????” >真

“?”>真

“?一个?” >假

“?a”>假

提前致谢!

编辑: 我错过了2例:

“?”>真

“?? ???” >真

5 个答案:

答案 0 :(得分:5)

这就像这样简单:

^[?]+$

表达式要求从开头^到结尾$的字符串由问号[?](方括号防止解释为元字符)重复一次或多次{ {1}}。

答案 1 :(得分:3)

鉴于字符串可以包含空格(根据编辑),正确的正则表达式是

^[ ?]*[?][ ?]*$

这允许任意数量的空格和问号,并保证至少存在一个问号。

答案 2 :(得分:1)

也许最好逃避问号(因为我总是逃避所有符号):

^\?+$

您也不需要方括号。

答案 3 :(得分:1)

/^(?=\s*\?)[?\s]+$/

解释:

^

匹配字符串的开头

(?= ... )

Lookahead,关于字符串中出现的内容的零宽度断言,此处用于断言:

 \s*

任何数量的空白区域,然后是:

\?

字面问号。确保字符串中至少有一个问号。

[?\s]

匹配问号或空格。

+

一次或多次。

$

匹配字符串的结尾。

答案 4 :(得分:0)

将正则表达式用作^\\?+$

    String regex = "^\\?+$";
    Pattern pattern = Pattern.compile(regex);
    System.out.println(pattern.matcher("?").find());//prints true
    System.out.println(pattern.matcher("??").find());//prints true
    System.out.println(pattern.matcher("????").find());//prints true
    System.out.println(pattern.matcher("?a?").find());//prints false
    System.out.println(pattern.matcher("?a").find());//prints false