【问题标题】:PHP regular expression: string must contain X character N timesPHP正则表达式:字符串必须包含X字符N次
【发布时间】:2015-05-12 17:15:07
【问题描述】:

我是正则表达式领域的新手。
我想创建一个表达式可以匹配字符串中的 X 字符 N 次。
例如:

X = t

N = 2

那么它应该匹配字符串test或tit或tt。

【问题讨论】:

  • 请问您为什么需要做这样的事情?这似乎不合逻辑。
  • @Darren 一个具体的例子是包裹跟踪条形码扫描仪。 UPS Mail Innovations DataMatrix 代码正好包含 13 个制表符,用于分隔不同的数据块。没有其他跟踪条形码使用这种格式,因此计算标签是确定“这是 UPS MI 代码还是垃圾”的简单方法。

标签: php regex perl


【解决方案1】:

使用正则表达式的解决方案

/^([^t]*t[^t]*){2}$/

在哪里N = 2

  • ^ 将正则表达式锚定在字符串的开头。

  • [^t]* 否定字符类,匹配除t 以外的任何字符。 * 量化它任意次数

  • t 后面跟着一个 t

  • [^t]* 后面紧跟t以外的任何内容

  • {2} 量化模式2 次。也就是说,它确保 not t 零次或多次后跟 t 且后跟 not t 零次或多次。整个事情必须发生2次

  • $ 将正则表达式锚定在字符串的末尾。

Regex Demo

测试

$X='t';
$N=2;

$regex="/^([^".$X."]*".$X."[^".$X."]*){".$N."}$/";

echo preg_match($regex, "test" );
// => True

使用substr_count的解决方案

substr_count函数返回字符串中子串出现的次数

$X='t';
$N=2;
if ( substr_count('test', $X ) == $N )
//The string is ok
else
//The string is not ok

【讨论】:

  • 这些正是我想要的。你能解释一下那个表达吗??
【解决方案2】:

这不是正则表达式的工作。您应该只计算字符串中字符 t 的出现次数并检查它是否等于 2。

计算字符串中字符出现次数的规范方法是使用tr///

例如:

for my $word (qw/ test tit tt tradescantia titillate intumescent trattoria /) {
    print $word, "\n" if $word =~ tr/t// == 2;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 2011-05-02
    • 2011-11-30
    • 2011-05-05
    • 2011-07-22
    • 2011-06-27
    • 1970-01-01
    相关资源
    最近更新 更多