使用尖括号的意外preg行为

时间:2013-04-01 23:21:44

标签: php regex

为什么目标字符串中的尖括号会否定第二个示例中的匹配文本。

$str = '[example1](example2)';
echo preg_replace('/\[(.*?)\]\((.*)\)/', '$2 $1', $str);

// output: example2 example1

$str = '[example1](<example2>)';
echo preg_replace('/\[(.*?)\]\((.*)\)/', '$2 $1', $str);

// output: example1

2 个答案:

答案 0 :(得分:2)

<example2>被浏览器解析为标记,因此不会显示。如果右键单击并查看源,您将在那里看到它。同样,如果您通过CLI运行它,您将看到正确的结果。

答案 1 :(得分:0)

$str = '[example1](<example2>)';


echo $str;

将为您生成[example1](),因为Web浏览器假定<example2>是html标记。 当显示以下结果时也会发生同样的情况。这场比赛碰巧很好。

echo preg_replace('/\[(.*?)\]\((.*)\)/', '$2 $1', $str);