带有fullstops正则表达式

时间:2017-01-27 11:22:07

标签: php regex preg-match-all

我正在为我正在使用的一些方法编写一些单元测试,并且发现了一个奇怪的错误并想要一些Regex建议。

做的时候: -

$needle = ' ';
$haystack = 'hello world. this is a unit test.';
$pattern = '/\b' . $needle . '\b/';
preg_match_all($pattern, $haystack, $matches, PREG_OFFSET_CAPTURE, $offset)

我希望这些职位能够找到职位

[5, 12, 17, 20, 22, 27]

就像我这样做一样,没有完全匹配的单词匹配

while (($pos = strpos($haystack, $needle, $offset)) !== false) {
   $offset = $pos + 1;
   $positions[] = $pos;
}

然而,preg_match_all没有找到第二次出现(12)

之间的空格
. this 

这与\ b边界标志有关吗?我如何解决这个问题,以确保它能够解决这个问题?

由于

1 个答案:

答案 0 :(得分:1)

您必须更改$pattern中的preg_match_all(),如下所示: -

<?php
$haystack = 'hello world. this is a unit test.';
while (($pos = strpos($haystack, ' ', $offset)) !== false) {
   $offset = $pos + 1;
   $positions[] = $pos;
}

echo "<pre/>";print_r($positions);

preg_match_all('/\s/', $haystack, $matches,PREG_OFFSET_CAPTURE);

echo "<pre/>";print_r($matches);

输出: - https://eval.in/725574

注意: - 您需要使用\s来检查空格

您可以根据if-else应用$pattern更改$needle: -

if($needle == ''){
   $pattern = '/\s/';
}else{
   $pattern = '/\b' . $needle . '\b/';
}