Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 为什么前导空格会阻止正则表达式匹配?_Regex_Perl_Unicode - Fatal编程技术网

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