这是使用preg_match_all计算出现次数的可靠方法吗?

时间:2012-03-27 13:38:01

标签: php regex

我需要在给定的字符串中计算这些字符的出现次数(大多数必须被转义):

[ // to be escaped
\ // to be escaped
] // to be escaped
^ // to be escaped
{ // to be escaped
| // to be escaped
} // to be escaped
~
€

所以我最终得到了这种模式'/[\[|\]|€\{|}|\\|\^|\||~]/u',希望它是正确的(不幸的是我在正则表达式方面不是很好,需要学习更多)。无论如何,结果:

$arr    = array();
$string = 't€s||t] st^_^ring[}}';
preg_match_all('/[\[|\]|€\{|}|\\|\^|\||~]/u', $string, $arr);

有点儿:

array
  0 => 
    array
      0 => string '€' (length=3)
      1 => string '|' (length=1)
      2 => string '|' (length=1)
      3 => string ']' (length=1)
      4 => string '^' (length=1)
      5 => string '^' (length=1)
      6 => string '[' (length=1)
      7 => string '}' (length=1)
      8 => string '}' (length=1)

我不知道如何解释它。我可以简单count($result[0])吗?有更可靠的方式吗?

3 个答案:

答案 0 :(得分:3)

根据the docpreg_match_all的返回值是一个表示完整模式匹配数的整数,或者是一个错误的布尔 false

答案 1 :(得分:2)

您是否尝试过count_chars()?它为您提供字符串中使用的所有字符的统计信息。

http://php.net/manual/en/function.count-chars.php

答案 2 :(得分:0)

你可以像这样轻松逃脱:

preg_replace("/([\[\]\\\^\{\}\|\~\€])/", "\\$1", $string);

(如果那是你追求的最终结果)