[^(_x005F)]
으로 수행하려는 작업은 음수 검색 결과 : (?<!_x005F)
이어야합니다. 그러나 실제로 작동하지 않습니다. Mark Byers가 지적했듯이 _x005F_x00FF_
과 같은 이스케이프 처리 된 16 진수 시퀀스의 선두 인 _x005F_
과 잘못 일치합니다.
그러나 Mark 's 솔루션에 부정적인 lookahead가 추가되어 작동하지 않습니다. 내가 대답 한 내용에 대한 설명 에서처럼 잘못된 텍스트는 동기화되지 않은 것처럼 보입니다. 16 진수/이스케이프 시퀀스와 동기화 상태를 유지하는 유일한 방법은 사이의 사이의 이스케이프 처리되지 않은 16 진수 시퀀스도 일치시키고 원하는 부분을 추출하는 캡처 링 그룹을 사용하는 것입니다. 이 정규식은 나를 위해 작동합니다 :
\G(?>(?>(?:(?!_x[0-9A-F]{4}_).)+|_x005F_x[0-9A-F]{4}_)*)(_x[0-9A-F]{4}_)
나는 그것이 끔찍한 것처럼 보이지만 나와 곰. :
\G
앵커 첫 번째 반복에서 문자열의 시작에 경기, 마지막 경기는 이후 종료 위치로 : D 여기에 고장입니다.
(?:(?!_x[0-9A-F]{4}_).)+
반복적 룩어가 16 진수 시퀀스의 첫 번째 캐릭터의 판단 않는 임의의 문자를 소비한다.
_x005F_x[0-9A-F]{4}_
은 이스케이프 된 16 진수 시퀀스를 사용합니다.
(?>(?:(?!_x[0-9A-F]{4}_).)+|_x005F_x[0-9A-F]{4}_)*
은 최대한 많은 횟수를 반복합니다. 가 종료되면, 다음 일은 (_x[0-9A-F]{4}_)
...에 의해 그룹 # 1에 캡처됩니다 문자열 또는 이스케이프 진수 시퀀스의 마지막되어야하며 여기에 online demo입니다 의 출력은 다음과 같습니다
이 abc_x0011_def_x005F__x0022_ghi_x005F_x0033_jkl_x0042_x005F_x00FF_x0043_mno
^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^^
_x0011_
_x005F_
_x0022_
_x0042_
_x00FF_
첫 번째 _x005F_
때문에 후행 밑줄의 다음 _x0022_
을 탈출하지 않습니다. 그렇게 혼자 서 있어도 괜찮은지 모르겠지만 왜 그렇게해서는 안되는 지 알 수 없습니다. 다음 _x005F
일 경우은 _x0033_
에서 탈출합니다.
나머지 샘플은 내가 Mark의 해결책에 대해 잘못 생각한 것을 보여줍니다. 그러나 그것이 잘못되었다는 것은 나 일 수있다. 내가하고있는 언어의 전체 구문을 모른다.
@errorstacks 편집시주의하십시오. 원래 거기에 없었던 밑줄을 몇 개 도입했습니다. – detunized
@detunized : 나는 OP에서 그 밑줄이 의도 된 것으로 생각한다. –
@detunized 죄송합니다. 죄송합니다. 방금 업데이트를 받았습니다 ... –