我有一个示例文本:
$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
答案 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);
我做过的改变:
\s
周围的括号 - 您不需要空格匹配$search
(括号内)添加了匹配组preg_quote
var_dump
preg_match
更改为preg_match_all
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]);