正则表达式可选匹配开始/结束行

时间:2013-03-31 20:44:19

标签: regex

如何选择匹配正则表达式中一行的开始^或结束$

例如:

/(?<=[\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);

3 个答案:

答案 0 :(得分:4)

如果您坚持在空白字符之后进行匹配,或者行开头,请使用alternation(而不是character class)。假设你的正则表达式支持lookbehind assertions中的替换。

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

但您可能正在寻找word boundary \b?它们匹配单词的开头或结尾。 (完全取决于从单词字符到非单词字符的变化或反之亦然)

您应该向我们提供更多信息:语言,输入和预期结果(包括角落案例)。

答案 1 :(得分:0)

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

答案 2 :(得分:0)