1

我在学习正则表达式和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);

?>

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

做错了什么,它没有按我预期的方式工作?

感谢你的帮助!

ps 发现这个也很有帮助

4

2 回答 2

3

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

我不确定你到底要做什么,但这会在开始和结束粗体标签上分开:<\/?b>- 它匹配<,然后是可选的/,然后是b>.

于 2012-10-02T02:51:21.743 回答
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>".

于 2012-10-02T03:05:41.257 回答