Regex 为什么前导空格会阻止正则表达式匹配?
我有一个正则表达式Regex 为什么前导空格会阻止正则表达式匹配?,regex,perl,unicode,Regex,Perl,Unicode,我有一个正则表达式'(\]+\>)',匹配得很好,但是在它前面添加了一个空格,但它没有: (\]+\>)”(不带”) 当我使用正则表达式匹配链接标记时,它完全匹配: $ echo '<para>Please see Listing <link href="#lst:11-alg1">2.1</link> with the' \ | perl -pe 's|(\<link [^\>]+\>)|###|g' <para>Ple
'(\]+\>)'
,匹配得很好,但是在它前面添加了一个空格,但它没有: (\]+\>)”
(不带”
)
当我使用正则表达式匹配链接
标记时,它完全匹配:
$ 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
结果仍然是原始文本,没有进行替换——regexp不匹配
我认为问题在于贪婪匹配(但我无法想象在哪里),我使用了+?
-修饰符和\s
,但没有效果。这也不是说regexp以一个'
开头:当我将列表
添加到模式中时,它也不匹配:
$ 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
$echo'请参见清单 2.1与\
|perl-pe的|列表(\]+\>)|##| g'
请参见清单 2.1与
我甚至在Python中也尝试了同样的方法:结果相同,所以我的regexp肯定有问题。如果您将字符串复制到记事本+,这是在列出ANSI之后的一个特殊字符。所以空间与之不匹配。这不是你日常使用的空间,这是一个“图形空间”()。这是一个空间,Jim,但不是我们所知道的…@towi如果字符串被解码并且你的perl不是古老的,
\s
将匹配该字符。但是如果你没有解码你的输入,那么它将不匹配:)@borodinu+00A0属于遗留语义,因为它属于U+00FF<代码>/\s/u始终与5.14+中的代码匹配<代码>\s不带/u
不可预测地匹配它;在字符串上设置utf8标志,或提及模式中的某些内容,将使其匹配。@Borodin/u
启用适当的unicode语义,其中u+00A0由\s
匹配,因为它具有空格
属性:)让我们称之为“特殊字符”。
$ 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