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 为什么perl忽略我的正则表达式中的额外字符?_Regex_Perl - Fatal编程技术网

Regex 为什么perl忽略我的正则表达式中的额外字符?

Regex 为什么perl忽略我的正则表达式中的额外字符?,regex,perl,Regex,Perl,我在bash中有这样一行代码: echo“a=-1”| perl-nle'if(/.*=[0-9]*/){print;}' 并获得: a=-1 等等..我没说perl应该在-上匹配。我对以下内容做了一个小改动: echo“a=-1”| perl-nle'if(/.*=[0-9]*$/){print;}' 它正确地忽略了这条线。为什么?第一个例子,你说[0-9]可以发生“*”次,这意味着零次或更多次(因此它只匹配“=”。当你添加“$”时,它不再匹配,因为它不会在[0-9]之后结束。第一个例子,你说

我在bash中有这样一行代码:

echo“a=-1”| perl-nle'if(/.*=[0-9]*/){print;}'

并获得:

a=-1

等等..我没说perl应该在
-
上匹配。我对以下内容做了一个小改动:

echo“a=-1”| perl-nle'if(/.*=[0-9]*$/){print;}'


它正确地忽略了这条线。为什么?

第一个例子,你说[0-9]可以发生“*”次,这意味着零次或更多次(因此它只匹配“=”。当你添加“$”时,它不再匹配,因为它不会在[0-9]之后结束。

第一个例子,你说[0-9]可以发生“*”次,这意味着零次或更多次(因此它只匹配“=”。当您添加“$”时,它不再匹配,因为它不在[0-9]后面结束。

[0-9]*可以匹配空字符串。当您锚定到字符串末尾时,您阻止了此空匹配


您可能想说[0-9]+,意思是“至少一个数字”。

[0-9]*可以匹配空字符串。当您锚定到字符串末尾时,您阻止了此空匹配


你可能想说[0-9]+来表示“至少一位”.

您可能会发现,在开发正则表达式时,只打印正则表达式实际匹配的字符串的一部分,而不是整行是很有用的。这将使您更好地了解正则表达式正在执行的操作。您可以使用特殊的
$&
变量来执行此操作。因此,不要:

echo "a=-1"|perl -nle 'if (/.*=[0-9]*/){print;}'
使用

您现在将获得不同的输出:

a=

这一新信息可能会让你在理解你的正则表达式是如何[管理信息系统]方面领先一步与输入数据有关的行为。

您可能会发现,在开发正则表达式时,只打印正则表达式实际匹配的字符串的一部分,而不是整行是很有用的。这将使您更好地了解正则表达式正在做什么。您可以使用特殊的
$&
变量来执行此操作。因此,不要:

echo "a=-1"|perl -nle 'if (/.*=[0-9]*/){print;}'
使用

您现在将获得不同的输出:

a=
这一新信息可能会让您在理解regex在输入数据方面的行为方式方面领先一步