当我运行我的代码时,这一条特定的行会导致问题。我很确定这是一个简单的修复,但我对perl很新,不确定如何解决它。
if (/^([.+\])\s*$/) {
有问题的一行。它告诉我[
是无与伦比的,希望能解决这个问题非常简单。提前感谢您提供任何解决方案。
答案 0 :(得分:2)
正则表达式只包含character class [...]
的左括号,因为其他括号已转义\]
,因此指定了文字]
字符。这是一个语法错误,它正是错误消息所说的内容。
如果要匹配文字括号内的任何字符,请转义第一个
/^( \[ .+ \] )\s*$/x
这匹配一个字符串,其中包含一对文字[]
内的所有字符,可能后跟空格。请注意,这可能包含嵌套[]
- 因为+
"greedy" .+\]
匹配尽可能多,所以直到最后]
字符串(和括号)。如果不希望这样,请使用匹配第一个.+?\]
(和括号)的]
。感谢Borodin发表评论。
我使用/x
修饰符,因为它会忽略空格,因此可用于提高可读性。
或者你想要角色类,在这种情况下,结束括号不应该被转义
/^( [.+] )\s*$/x
匹配仅包含句点.
或加号+
的字符串以及可能的尾随空格。 (.
和+
在字符类中没有特殊含义。)
另一个猜测是,您希望匹配.
或+
或\
,在这种情况下,反斜杠本身需要转义
/^( [.+\\] )\s*$/x
中提到
\
是have a special meaning中为数不多的几个字符之一
在角色类中。
请首先尝试在问题中指定所有相关信息。
答案 1 :(得分:1)
您通过写\]
来转义结束括号。如果你想在你的角色类中使用反斜杠,请使用两个。
像这样:
#!/usr/bin/env perl
use strict;
while(<>) {
chomp;
if (/^([.+\\])\s*$/) {
print "matched\n";
}
}