我很难学习正则表达式和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非常有帮助
答案 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>"
。