我正在寻找一个正则表达式,如果字符串包含字符*
,那么它将匹配,但只有一次。它应与a*aa
,aa*aaaaa
,a*aaaa
匹配,但不应与a**a
,a****
,****
匹配。有什么建议吗?
答案 0 :(得分:12)
你可以尝试这种模式:
^[^*]*\*[^*]*$
说明:
^ begining of the string
[^*]* all characters except * zero or more times
\* literal *
[^*]* all characters except * zero or more times
$ end of the string
答案 1 :(得分:4)
看起来好像你正在捕获这个字符串中的任何一个 - 所以为什么要使用正则表达式开头呢? tr//
将返回匹配数:
my $nStars = ( $str =~ tr/*/*/ );
答案 2 :(得分:0)
您可以将分割功能与/\*/
一起使用。如果返回数组的长度为2,则表示您只有一个*。