当计数结果返回时,preg_match无法在php中工作

时间:2012-05-18 07:33:01

标签: php

我有一个示例文本:

$text = "ác, def ác ghi ác xyz ác, jkl";
$search = "ác";
$_x_word = '/(\s)'.$search.'(\s)/i';
preg_match($_x_word, $text, $match_words);
echo count($match_words);

当我回显计数($ match_words)时,结果返回为空

如何解决它的输出是2

5 个答案:

答案 0 :(得分:0)

这样的事可能会这样做:

echo \preg_match_all('/\sác\s/i', "ác, def ác ghi ác xyz ác, jkl");

答案 1 :(得分:0)

首先,当你这样做时,总是在$search周围使用preg_quote来逃避你的正则表达式分隔符。

然后,您的代码非常好(即使没有preg_quote)。它为我输出3。由于字符串中的非ASCII字符,您可能会遇到文件编码问题。你尝试过使用UTF8吗?

答案 2 :(得分:0)

将其更改为:

$text = "ghi ác xyz ác, jkl";
$search = "ác";
$_x_word = '/\s(' . preg_quote($search) . ')\s/i';
preg_match_all($_x_word, $text, $match_words);
var_dump($match_words);

http://ideone.com/hZD3X

我做过的改变:

  1. 删除\s周围的括号 - 您不需要空格匹配
  2. $search(括号内)添加了匹配组
  3. 已添加preg_quote
  4. 介绍var_dump
  5. preg_match更改为preg_match_all
  6. PS:使用

    可能\b代替\s

答案 3 :(得分:0)

使用:

preg_match_all($_x_word, $text, $match_words, PREG_SET_ORDER);

而不是preg_match

答案 4 :(得分:0)

你必须使用preg_match_all修改/u进行unicode匹配才能结束,并更改paranthesis以获得真正的匹配。

<?php
    $text = "ác, def ác ghi ác xyz ác, jkl";
    $search = "ác";
    $_x_word = '/\s('.$search.')\s/ui';
    preg_match_all($_x_word, $text, $match_words);

    //full matches (with spaces)
    var_dump($match_words[0]);
    //only  ác matches.
    var_dump($match_words[1]);