PHP-匹配不包含HTML标记的空间

PHP-匹配不包含HTML标记的空间,php,regex,Php,Regex,我有这样一个文本: Word word word <a href=google.com>word word word</a> word word word Word 我需要空格的位置,它没有被任何html标记包围-空格的位置在下面划线: Word_word_word_<a href=google.com>word word word</a>_word_word_word Word\u Word\u Word\u Word\u Word 我应

我有这样一个文本:

Word word word <a href=google.com>word word word</a> word word word
Word
我需要空格的位置,它没有被任何html标记包围-空格的位置在下面划线:

Word_word_word_<a href=google.com>word word word</a>_word_word_word
Word\u Word\u Word\u Word\u Word
我应该使用什么正则表达式(在
preg_match()
中)?

使用函数:

$string = "Sample Sample Sample Sample Sample";
$name = str_replace(' ', '_', $string );
echo $name;

一个相当简单的方法:

$test = 'Word word word <a href=google.com>word word word</a> word word word';
$t = preg_replace('#\s+((?=.*<a)|(?!.*</a>))#', '_', $test);
var_dump($t); 
// string 'Word_word_word_<a href=google.com>word word word</a>_word_word_word'
$test='Word';
$t=preg_replace('#\s+(?=.*u word_word_word'

显然,它不适用于可能包含多个嵌入href的字符串;对于这些情况,我建议另一种方法:1)按
部分拆分字符串,2)替换非链接部分中的所有空格;3)重构字符串。

可能很有用:PHP文档会告诉您使用选项PREG\u OFFSET\u CAPTURE来实现您想要的:谢谢,这就是我要找的。我的文本中不会嵌入标签。我还有一个问题:如何将其更改为不匹配IMG标签中的空格?编辑:好的,我有:
#\s+(?=.*@Siorus如果这些标记在处理的字符串中是严格独占的,并且您的HTML格式正确,请替换