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格式正确,请替换