Php preg_使用fullstops regex匹配所有空格
我正在为我正在使用的一些方法编写一些单元测试,发现了一个奇怪的bug,希望得到一些正则表达式的建议 执行以下操作时:-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) 我希望找到的位置是正确的
$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/';
}