正则表达式匹配只能在字符串中出现一次的字符?

时间:2013-07-25 21:43:59

标签: regex perl character matching

我正在寻找一个正则表达式,如果字符串包含字符*,那么它将匹配,但只有一次。它应与a*aaaa*aaaaaa*aaaa匹配,但不应与a**aa********匹配。有什么建议吗?

3 个答案:

答案 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,则表示您只有一个*。