2

我怎么能写一个匹配只包含问号的字符串的正则表达式

“???” > 真的

“???” > 真的

“?” > 真的

“?一种?” > 假

"?a" > 假

提前致谢 !

编辑:我错过了 2 个案例:

“?” > 真的

“???” > 真的

4

5 回答 5

7

就像这样简单:

^[?]+$

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

于 2012-11-13T14:57:00.527 回答
4

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

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

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

于 2012-11-13T18:42:28.023 回答
2

也许转义问号是一个更好的主意(因为我总是转义所有符号):

^\?+$

您也不需要方括号。

于 2012-11-13T14:59:26.933 回答
1
/^(?=\s*\?)[?\s]+$/

一个解释:

^

匹配字符串的开头

(?= ... )

Lookahead,关于字符串中即将出现的内容的零宽度断言,这里用于断言:

 \s*

任意数量的空白,后跟:

\?

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

[?\s]

匹配问号或空格。

+

一次或多次。

$

匹配字符串的结尾。

于 2012-11-13T18:38:12.840 回答
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
于 2012-11-13T16:54:02.913 回答