为什么一个领先的空间阻止正则表达式匹配?

时间:2014-08-25 20:10:12

标签: regex perl unicode

我的正则表达式'(\<link [^\>]+\>)'匹配正常,但在它前面添加了一个空格而且它不是' (\<link [^\>]+\>)'(没有')。

当我使用正则表达式匹配link标记时,它完全匹配:

$ echo '<para>Please see Listing <link href="#lst:11-alg1">2.1</link> with the' \
    | perl -pe 's|(\<link [^\>]+\>)|###|g'
<para>Please see Listing ###2.1</link> with the

正如您所看到的,<link...>###取代 - 因此正则表达式匹配。

当我在正则表达式之前添加单个空格时,它不再匹配

$ echo '<para>Please see Listing <link href="#lst:11-alg1">2.1</link> with the' \
    | perl -pe 's| (\<link [^\>]+\>)|###|g'
<para>Please see Listing <link href="#lst:11-alg1">2.1</link> with the

结果仍然是原始文本,没有替换 - 正则表达式不匹配。

我认为问题是贪婪的匹配(但我无法想象在哪里),我玩+? - 修饰符和\s,但没有效果。而且,正则表达式也不是以' '开头:当我将Listing添加到它不匹配的模式时:

$ echo '<para>Please see Listing <link href="#lst:11-alg1">2.1</link> with the' \
    | perl -pe 's|Listing (\<link [^\>]+\>)|###|g'
<para>Please see Listing <link href="#lst:11-alg1">2.1</link> with the

我甚至尝试过与Python相同:结果相同,所以我的正则表达式一定是错的。

1 个答案:

答案 0 :(得分:0)

如果将字符串复制到Notepad ++中,它是列出ANSI(‡)之后的特殊字符。所以空间不匹配。