遇到preg_split问题并使用正则表达式

时间:2012-10-02 02:46:19

标签: php regex preg-split

我很难学习正则表达式和preg_split

我正在尝试应用我已经学到的东西并且似乎无法进行简单的搜索......

我尝试了很多变体,但无法在粗体标记和粗体标记之间分开

<?php
$string = "<b>this is</b> <i>not</b> <b>bold</b>";


$find = '/<b>/';       // works as expected, separating at <b>

$find = '/<b>|<\/b>/'; // works as expected, separating at either <b> or </b>

$find = '/<b>*<\/b>/'; // why doesn't this work?

$find = '/^<b>*<\/b>/'; // why doesn't this work?

$find = '/<b>.<\/b>/'; // why doesn't this work

$result = preg_split($find, $string);

print_r($result);

?>

如您所见,我正在尝试合并. +或开始^ /完成$字符。

我在做什么非常错误哪里没有按照我的预期工作?

感谢您的帮助!

P.S。找到this非常有帮助

2 个答案:

答案 0 :(得分:3)

前两个“为什么不起作用”匹配<b后跟零个或多个>字符,后跟</b>。最后一个匹配<b>然后匹配任何单个字符</b>

我不确定您要完全尝试做什么,但这会分为开始和结束粗体标记:<\/?b> - 它匹配<,后跟可选/ },然后是b>

答案 1 :(得分:1)

$find = '/<b>*<\/b>/'; // why doesn't this work?

匹配"<b",零个或多个">",然后是"</b>"

也许你的意思是:

$find = '/<b>.*?<\/b>/';

这将匹配"<b>",后跟一个未知长度的字符串,在第一次出现"</b>"时结束。我不知道为什么你会分裂呢;应用于上面你会得到一个由三个元素组成的数组:

" "
"<i>not</b> "
""

要匹配"<b>""</b>"内的所有内容,您需要preg_match_all()

preg_match_all('#<b>(.*?)</b>#i', $str, $matches);
// $matches[1] will contain the patterns inside the bold tag, theoratically

请注意,嵌套标记不适合正则表达式,并且您希望使用DOMDocument


$find = '/^<b>*<\/b>/'; // why doesn't this work?

匹配字符串开头的"<b",零或更多">",然后是"</b>"

$find = '/<b>.<\/b>/'; // why doesn't this work

匹配"<b>",后跟任意字符,后跟"</b>"