Regex 正则表达式匹配所有不以开头的行==
这应该很简单,但我一直有麻烦。我想用perl编写一个正则表达式来匹配所有不以“==”开头的行。我创建了这个表达式: ^[^\=\=]* 这在我使用的正则表达式测试仪中运行良好,但当我运行perl脚本时,会出现一个错误,说明: POSIX语法[==]保留用于正则表达式中的未来扩展Regex 正则表达式匹配所有不以开头的行==,regex,perl,Regex,Perl,这应该很简单,但我一直有麻烦。我想用perl编写一个正则表达式来匹配所有不以“==”开头的行。我创建了这个表达式: ^[^\=\=]* 这在我使用的正则表达式测试仪中运行良好,但当我运行perl脚本时,会出现一个错误,说明: POSIX语法[==]保留用于正则表达式中的未来扩展 脚本终止。我想我使用了一些错误的语法,但是我没有发现任何与此相关的东西。有人有更好的方法来匹配这些行吗?您的正则表达式不正确,例如,它以=a作为输入失败。 一种方法是使用与Perl兼容的正则表达式(PCRE):^(?!=
脚本终止。我想我使用了一些错误的语法,但是我没有发现任何与此相关的东西。有人有更好的方法来匹配这些行吗?您的正则表达式不正确,例如,它以
=a
作为输入失败。
一种方法是使用与Perl兼容的正则表达式(PCRE):
^(?!==)
您的正则表达式是不正确的,例如,它以=A
作为输入失败。
一种方法是使用与Perl兼容的正则表达式(PCRE):
^(?!==)
您误解了字符类在正则表达式中的工作方式
字符类由方括号[…]
分隔,通常与它所包含的任何一个字符相匹配。因此[abc]
将匹配a
、b
或c
,但仅匹配aa
或cbc
的第一个字符。您可能知道也可以使用范围,例如[a-c]
您还可以像前面所做的那样对类进行求反,这样[^a]
将匹配任何一个不是a
的字符,例如z
或&
,但只匹配zz
的第一个字符
在类中复制字符不会改变它匹配的内容,因此[aardvark]
将恰好匹配a
、d
、k
、r
或v
中的一个,并且相当于[adkrv]
您的正则表达式模式使用字符类[^\=\=]
。不需要转义等号,复制它也没有效果,因此您可以使用等价的[^=]
,它将匹配除等号以外的任何单个字符=
您收到该错误消息的原因是,字符类以[=
开头,以=]
结尾(只是[=]
不算在内),保留用于尚未实现的特殊行为。如上所述,通常没有理由编写具有相同字符多次出现的字符类,因此不允许这种构造是合理的
有这样的说法吗
POSIX语法[==]保留给正则表达式中的未来扩展;标记为您误解了字符类在正则表达式中的工作方式 字符类由方括号
[…]
分隔,通常与它所包含的任何一个字符相匹配。因此[abc]
将匹配a
、b
或c
,但仅匹配aa
或cbc
的第一个字符。您可能知道也可以使用范围,例如[a-c]
您还可以像前面所做的那样对类进行求反,这样[^a]
将匹配任何一个不是a
的字符,例如z
或&
,但只匹配zz
的第一个字符
在类中复制字符不会改变它匹配的内容,因此[aardvark]
将恰好匹配a
、d
、k
、r
或v
中的一个,并且相当于[adkrv]
您的正则表达式模式使用字符类[^\=\=]
。不需要转义等号,复制它也没有效果,因此您可以使用等价的[^=]
,它将匹配除等号以外的任何单个字符=
您收到该错误消息的原因是,字符类以[=
开头,以=]
结尾(只是[=]
不算在内),保留用于尚未实现的特殊行为。如上所述,通常没有理由编写具有相同字符多次出现的字符类,因此不允许这种构造是合理的
有这样的说法吗
POSIX语法[==]保留给正则表达式中的未来扩展;标记为从下面检查来自tchrist的答案从下面检查来自tchrist的答案谢谢您的答案。我明白为什么这比我做的更有意义了。谢谢你的回答。我明白为什么这比我做的更有意义。
unless ( /^==/ )
if ( not /^==/ )