2017-09-26 72 views
-1

我是perl的初学者,我正在寻找如何使用正则表达式搜索文件中的多个特殊字符。基本上,我有一个结束标记/>,我需要在文件中进行验证。我读过,当我们有特殊字符时,我们需要先使用'\'。但我有两个特殊字符,我不知道如何完成此检查。如何使用Perl中的正则表达式检查多个特殊字符

我使用类似下面,包含中间/>/\""/但它不工作:

$line =~ /\/>/ 

可能有人能帮我解决这个模式使用正则表达式匹配?

+1

https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags?rq=1 – Isaac

+5

不要使用正则表达式解析XML/HTML/... 。别。请参阅Isaac评论中的链接,并运行“XML :: LibXML”或“XML :: Twig”或其中一个HTML模块。话虽如此,'$ line =〜m {/>}'照顾_that_(一个)示例:使用非'/'的分隔符,而'>'不是特殊的。 – zdim

+0

非常感谢你! –

回答

-1

我相信\ Y或\ Q .. \ E是你的朋友在这里。

/text\Y$literal\Ytext/ 
    /\Q.*\Etext/ 

\ Y列为没有任何运行时变量插值。这意味着所有的Perl变量将被视为文字符号。

\ Q .. \ E列为(禁用)模式元字符。这意味着通常的正则表达式特殊字符将被视为文字符号而不需要转义它们。

http://perldoc.perl.org/perlre.html

0

既不/也不>是具有在Perl的正则表达式特殊含义的字符。因此,他们不需要转义,以防止他们有特殊的含义。但是,/是正则表达式的默认分隔符,这意味着您必须转义(否则,Perl认为该模式在那里结束),或者,最好使用不同的分隔符。

所以,

$line =~ m {/>}; 

应该做的。

$line =~ /\/>/; 

工作为好,但那是知道的“倾斜牙签综合症”,并且应该避免(由于可读性原因)。

相关问题