Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这是使用preg_match_all统计事件的可靠方法吗?_Php_Regex - Fatal编程技术网

Php 这是使用preg_match_all统计事件的可靠方法吗?

Php 这是使用preg_match_all统计事件的可靠方法吗?,php,regex,Php,Regex,我需要对给定字符串中出现的这些字符进行计数(大多数字符必须转义): [ // to be escaped \ // to be escaped ] // to be escaped ^ // to be escaped { // to be escaped | // to be escaped } // to be escaped ~ € 因此,我最终使用了这个模式:“/[\[\\]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

我需要对给定字符串中出现的这些字符进行计数(大多数字符必须转义):

[ // to be escaped
\ // to be escaped
] // to be escaped
^ // to be escaped
{ // to be escaped
| // to be escaped
} // to be escaped
~
€
因此,我最终使用了这个模式
“/[\[\\]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]。无论如何,结果是:

$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)
我不知道如何解释它。我可以简单地
计数($result[0])
?有更可靠的方法吗?

你试过用count\u chars()代替吗?它提供字符串中使用的所有字符的统计信息

你试过用count\u chars()代替吗?它提供字符串中使用的所有字符的统计信息


根据,preg\u match\u all
的返回值是一个表示完整模式匹配数的整数,或者是一个出错的布尔值false

根据,preg\u match\u all的返回值是一个表示完整模式匹配数的整数,或布尔值false出错。

您可以像这样轻松地避开它们:

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

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

你可以像这样轻松地逃离他们:

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


(如果这是您追求的最终结果)

count($result[0])
应该可以。不明白为什么它不可靠。@RickKuipers
0
索引是什么?我问这个问题是因为我不知道我是否可以依赖这个指数。你是想一个一个数一个,还是全部数一个?@helle总之,不管出现了多少次,比如说欧元符号。好吧,我说的和Rick一样,
count($result[0])
应该很好。不明白为什么它不可靠。@RickKuipers
0
索引是什么?我问这个问题是因为我不知道我是否可以依赖这个索引。你是要逐个计数,还是全部计数?@helle,不管出现多少次,比如欧元符号。好吧,我说的和Rick doesIndeed一样,代码似乎没有意义,你输出的数组是什么?哦,谢谢。代码有输入错误,我现在已经修复,不知道我可以使用返回值。我猜这就是答案。事实上,代码似乎没有意义,您正在输出的数组是什么?哦,谢谢。代码有输入错误,我现在已经修复,不知道我可以使用返回值。我猜这就是答案。我猜它比使用正则表达式更快(CPU方面),是的。但是最快的解决方案(计算编程时间)可能就是有效的解决方案,因为您原来的解决方案现在不起作用,所以我认为它相当慢。;)它实际上取决于数据,但通常比regexp快。但它在UTF-8中不起作用。无论哪种方式,性能方面的差异都太小,无法成为这里的一个因素。@Janek我需要UTF8,所以count_chars()帮不上忙,但谢谢。不知道为什么我的正则表达式不适合你。即使不能匹配欧元符号和^symbol,它也适用于我。调查原因……好吧,我明白了。还有两个提示:使用www.regexr.com调试正则表达式,或者在循环中使用substr_count()来计算有趣的字符。我猜它比使用regex更快(CPU方面),是的。但是最快的解决方案(计算编程时间)可能就是有效的解决方案,因为您原来的解决方案现在不起作用,所以我认为它相当慢。;)它实际上取决于数据,但通常比regexp快。但它在UTF-8中不起作用。无论哪种方式,性能方面的差异都太小,无法成为这里的一个因素。@Janek我需要UTF8,所以count_chars()帮不上忙,但谢谢。不知道为什么我的正则表达式不适合你。即使不能匹配欧元符号和^symbol,它也适用于我。调查原因……好吧,我明白了。还有两个提示:使用www.regexr.com调试正则表达式,或者在循环中使用substr_count()来计算感兴趣的字符。