我已经转移到新服务器, Perl 5.22.1 。我有这段代码:
$html =~ m{
( # $1 the whole tag
<
(
?:
!--
( # $2 the attributes are all the data between
.*?
)
--
| # or
(
?:
( # $3 the name of the tag
/?\S+?\b
)
( # $4 the attributes
[^'">]*
(
?:
( # $5 just to match quotes
['"]
)
.*?\5
[^'">]*
)*
)
)
)
>
)
}gsx
...现在它给了我这个错误:
A fatal error has occurred:
In '(?...)', the '(' and '?' must be adjacent in regex; marked by <-- HERE in m/
( # $1 the whole tag
<
(
? <-- HERE :
!--
( # $2 the attributes are all the data between
.*?
)
--
| # or
(
?:
( # $3 the name of the tag
/?\S+?\b
)
( # $4 the attributes
[^'">]*
(
?:
( # $5 just to match quotes
['"]
)
.*?\5
[^'">]*
)*
)
)
)
>
)
/ at ./admin/GT/HTML/Parser.pm line 207.
Compilation failed in require at (eval 25) line 8.
Please enable debugging in setup for more details.
我不确定它在抱怨什么。有什么想法吗?
答案 0 :(得分:5)
即使使用?:
修饰符,您也需要确保x
(非捕获组标记)在左括号 后立即
参见固定的正则表达式声明:
$html =~ m{
( # $1 the whole tag
<
(?:
!--
( # $2 the attributes are all the data between
.*?
)
--
| # or
(?:
( # $3 the name of the tag
/?\S+?\b
)
( # $4 the attributes
[^'">]*
(?:
( # $5 just to match quotes
['"]
)
.*?\5
[^'">]*
)*
)
)
)
>
)
}gsx
请参阅this reference:
请注意
\Q...\E
内的所有内容均不受/x
的影响。请注意,/x
不会影响单个多字符构造中的空间解释。例如,在\x{...}
中,无论/x
修饰符如何,都不能有空格。对于{3}
或{5,}
等量词也是如此。 同样,(?:...)
在"{"
,"?"
和":"
之间不能有空格。在这种构造的任何分隔符内,允许的空格不受/x
的影响,并且取决于构造。例如,\x{...}
不能包含空格,因为十六进制数字中没有空格。
我认为有一个拼写错误 - {
必须是(
。我加粗了与当前场景相关的部分文本。