2011-06-13 4 views
10

Writing text into new line when a particular character is found에 대한 답변을 시도하면서 나는 Regexp::Grammars을 고용했습니다. 그것은 오랫동안 관심이 많았고 마침내 배울 이유가있었습니다.외톨이 캐럿 만있는 문자 클래스는 무엇을합니까?

<rule: Option>  [^][\$&%#_{}~^\s,]+ 

    <rule: Literal> [^][\$&%#_{}~^\s]+ 

[^] 문자 클래스는 무엇을 달성 할 : 나는 설명 섹션 저자는 라텍스 파서 (나는 열렬한 LaTeX의 사용자입니다, 그래서이 나에게 관심이)하지만 그것은 하나 명의 이상한 구조가 여기 볼 수 있음 것으로 나타났습니다?

답변

20

[^][…]하지 두 문자 클래스이지만 ], [ 이외의 다른 문자를 포함하는 하나의 문자 클래스 (Special Characters Inside a Bracketed Character Class 참조) 다음 ]처음 경우,

그러나 (또는 첫 번째 문자가 첫 번째 문자가 캐럿 인 경우 두 번째) 문자는 클래스의 끝을 나타내지 않으며 (빈 클래스를 가질 수 없기 때문에) 이스케이프 처리없이 일치 할 수있는 문자 집합의 일부로 간주됩니다.

예 :

"+" =~ /[+?*]/  # Match, "+" in a character class is not special. 
"\cH" =~ /[\b]/  # Match, \b inside in a character class 
        # is equivalent to a backspace. 
"]" =~ /[][]/  # Match, as the character class contains. 
        # both [ and ]. 
"[]" =~ /[[]]/  # Match, the pattern contains a character class 
        # containing just ], and the character class is 
        # followed by a ]. 
+0

@Gumbo이 펄, 내 (잘못된) 답 삭제됩니다 정규식을 구문 분석 방법임을 확실하게 명시 할 수 있습니다. 확실한가요? – Phrogz

+0

@Phrogz, 이것이 Perl이 처리하는 방법입니다. – Qtax

+0

@Gumbo, LaTeX 파서가 필요로하는 것과 더 많이 일치하는 것 같습니다. 문서의 어딘가에?!?! –