3

如何选择匹配正则表达式中行的开头^或结尾?$

例如:

/(?<=[\s\^])/不匹配以空格字符或行首开头。

我的问题是在 PHP 中匹配以下内容。

$str = '**bold** **bold** **bold**';
echo preg_replace('/(?<=\s|^)\*\*(.+?)\*\*(?=\s|$)/', '<strong>\\1</strong>', $str);

我的边缘情况在字符串的开头和结尾都是粗体,没有被匹配。我在其他变体中遇到的一些边缘情况是在字符串内匹配、匹配星号链以及无数其他问题。

echo preg_replace('/(?<=^|\s|\>)[\*]{2,}(?=[^\s\*])(.+?)(?<=[^\s\*])[\*]{2,}(?=\s|\<|$)/', '<strong>\\1</strong>', $str);
4

2 回答 2

6

如果您坚持在空白字符首之后进行匹配,请使用交替(而不是字符类)。假设您的正则表达式风格支持后向断言中的交替。

/(?<=\s|^)\w+/m

但可能您正在寻找一个单词边界, \b。它们匹配单词的开头或结尾(确切地说是从单词字符变为非单词字符或相反)。

于 2013-03-31T20:53:10.813 回答
0

只需卸下锚。如果没有锚,正则表达式将匹配您正在搜索的字符串中的任何位置。

于 2013-03-31T20:45:29.440 回答