Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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_使用fullstops regex匹配所有空格_Php_Regex_Preg Match All - Fatal编程技术网

Php preg_使用fullstops regex匹配所有空格

Php preg_使用fullstops regex匹配所有空格,php,regex,preg-match-all,Php,Regex,Preg Match All,我正在为我正在使用的一些方法编写一些单元测试,发现了一个奇怪的bug,希望得到一些正则表达式的建议 执行以下操作时:- $needle = ' '; $haystack = 'hello world. this is a unit test.'; $pattern = '/\b' . $needle . '\b/'; preg_match_all($pattern, $haystack, $matches, PREG_OFFSET_CAPTURE, $offset) 我希望找到的位置是正确的

我正在为我正在使用的一些方法编写一些单元测试,发现了一个奇怪的bug,希望得到一些正则表达式的建议

执行以下操作时:-

$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边界标志有关吗?如何解决此问题以确保它拾取其他此问题


谢谢

您必须在
preg\u match\u all()
中更改您的
$pattern
,如下所示:-

<?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);

如果两边都需要一个单词char,您怎么能期望
\b\b
匹配
之间的空格?你需要什么单词边界?“单词”对你来说是什么?空间不能是任何逻辑世界中的单词。嗨,维克托,我不是!这就是我编写测试的原因,我想知道如何正确处理它。我的代码适用于文字,但我想更新它,以处理它是否以空格=)的形式传递。Brill,谢谢你,Anant-工作非常完美。测试现在都是绿色的!=)@很高兴能帮助你。:)
if($needle == ''){
   $pattern = '/\s/';
}else{
   $pattern = '/\b' . $needle . '\b/';
}