2017-09-26 2 views
-1

저는 Perl 초보자이며 Regex를 사용하여 파일에서 여러 특수 문자를 검색하는 방법을 모색 중입니다. 기본적으로 파일에서 확인할 필요가있는 닫는 태그 />가 있습니다. 나는 특수 문자가있을 때 '\'를 먼저 써야한다는 것을 읽었다. 하지만 두 특수 문자가 함께 있고이 검사를 수행하는 방법을 잘 모르겠습니다.Perl에서 Regex를 사용하여 여러 특수 문자를 확인하는 방법

나는 /\""/ 있지만 작동하지 않는 사이에-/> 포함, 아래 같은 것을 사용하고 있습니다 :

$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 {/>}'은 다음과 같은 것을 처리합니다 :'/'이외의 구분자를 사용하고,'>'는 특별하지 않습니다. – zdim

+0

정말 고마워요! –

답변

-1

나는 \ Y 또는 \ Q .. \ E가 여기있는 당신의 친구라고 믿습니다.

\ Y는 런타임 변수 보간없이 나열됩니다. 이것은 모든 펄 변수가 리터럴 심볼로 취급된다는 것을 의미합니다.

\ Q .. \ E (사용 불가능) 패턴 메타 문자로 나열됩니다. 즉, 정규 표현식 특수 문자는 문자 그대로 이스케이프 처리하지 않고 문자 그대로 취급됩니다.

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

0

어느 />는 펄 정규 표현식에서 특별한 의미를 갖는 문자입니다. 따라서 그들은 특별한 의미를 가지지 않도록 도피 할 필요가 없습니다. 그러나 /은 정규식의 기본 구분 기호입니다. 즉, 이스케이프 처리해야합니다 (그렇지 않으면 Perl은 패턴이 끝났다고 생각합니다). 그렇지 않으면 다른 구분 기호를 사용하는 것이 좋습니다.

그래서

,

$line =~ m {/>}; 

는해야한다.

$line =~ /\/>/; 

뿐만 아니라 작동하지만, 그 "이쑤시개 증후군을 기대어"로 알고 있어요는 (가독성을 이유로) 피해야해야한다.

관련 문제