2012-02-27 6 views
1

'[~'및 '~]'태그 사이의 모든 것을 일치시켜야합니다. 지정한 문자 쌍 사이의 모든 것을 캡처하는 단순한 (!?) 정규식

정규식 패턴을 많이 쓰는 시도하지만 올바른 하나를 찾을 수 없습니다 :

  1. #\[~(.*)~]#을 -이 의 첫 번째 항목 사이의 모든 것을 돌려 [~ ~의과 마지막에 출현].
  2. #\[~([^~]*)~]# - 태그 안에 ~ 기호가 없으면 정상적으로 작동합니다.

나는 쌍이 가능] ~ (모든 바이트 쌍 제외] ~ (.*) 모든 것을 캡처하고 ~ 문자를 발견하지만 난 그게 을 찾을 때까지이 모든 것을 포착 할 수 있도록 못할 때까지 ([^~]*) 모든 것을 캡처 이해 단일 태그 ~ 문자를 포함한 내부 태그). 즉, 나는 한 쌍의 문자에 대해 부정을 만드는 방법을 모른다. 이렇게

Simple [example~]: [~here I can face both, ‘~’ and ‘]’ characters~] or another 
example [~~~~~~[ABC]~~~~~~]. 

정규식 대해 preg_match_all() 후 I은 생성 된 기대하는 어레이 :

이 가능한 예이다

array(2) { 
    [0]=> 
    string(44) "here I can face both, '~' and "]" characters" 
    [1]=> 
    string(14) "~~~~~[ABC]~~~~~" 
} 

참고 입력 문자열 이진 데이터 (00-FF)를 포함 할 수있다.

(특정 사용자의 경우) 이미 관련 Q/A + 수백 개의 Google 검색 결과를 확인했습니다.

+0

나를 위해 그것은 그대로 잘 작동하는 것 같습니다. 너는 무엇을 얻고, 너는 기대하지 않는다? – Svish

+0

@Svish, 첫 번째 예제는 큰 결과를 가져 오거나, 어떤 경우에는 바이너리 컨텐츠에 대해 실행했을 때 첫 번째 발생 또는 전혀 반환하지 않습니다. 위에서 언급했듯이 두 번째 패턴은 태그 안에 ~ 기호가 없으면 잘 작동하며 그 이유를 이해합니다. 나는 바이너리 데이터에 대한 hakre의 대답을 테스트하고있다. 나는 그렇게 생각한다. 내 패턴에 변화가 생겼어요. 왜 아직도 모릅니다. – Wh1T3h4Ck5

+0

@Svish, 내 예제 첫 번째 패턴은 "~"또는 [] ~ 문자 [~] 또는 [ABC] ~~~~~ ""와 같은 두 가지 모두를 직면 할 수 있습니다. 분명히 맞지 않습니다. http://www.rubular.com/r/3xFgKN1Psr – Wh1T3h4Ck5

답변

3

*은 욕심이 많으므로 최대한 많이 소요됩니다. 문제를 해결할 욕심이 없도록 (? 추가) 만들 수 있습니다.

#\[~(.*?)~]# 

다음 웹 사이트는 좋은 설명이 더 상세하게 설명 : Repetition with Star and Plus.

preg_match은 바이너리 문자열을 매우 잘 처리합니다. .은 사용자가 표준 모드 (비 utf8) 인 경우 바이트로 읽는 문자와 일치합니다. 설명은


간단한 예 : 첫번째

aab :: a* -> aa 

일치 다음 빈 문자열, A, 다음 aa는 다음 AAB 그렇게 마지막 경기 AA 촬영 및 반환 일치하지 않습니다. 보시다시피 엔진에는 내부적으로 세 개의 유효한 일치 항목 (빈 문자열, a 및 aa)이있었습니다. 마지막 하나는 욕심쟁이 모드에서 승리합니다.

aab :: a*? -> (empty string) 

첫 번째 위치에 있습니다. 비 욕심 많은 욕구가 0 개 이상 필요합니다. 첫 번째 위치는 0 이상입니다. 따라서 빈 문자열과 일치하고 반환됩니다. 첫 번째는 욕심없는 모드에서 승리합니다.

UTF-8 문자열의 경우 UTF-8 문자 (하나 이상의 바이트가 될 수 있음)와 일치하는 : #.*#u - .을 사용하십시오.

+0

작동합니다 ... 바이너리가 아닌 일반 텍스트를 사용하려고했습니다 ... 대부분의 내용은 UTF-8로 인코딩되어 있습니다. 그 물음표는 분명히 트릭을합니다. ** (. *?) ** 부분을 설명해 주시겠습니까? 그것은 작동하지만 나는 어떻게 몰라? – Wh1T3h4Ck5

+0

네, 마침내 제가 지금까지 (약 30 혼합 utf - 8 문서 승/그것에 약간의 바이너리 코드)에 대해 그것을 테스트 한 모든 것을 위해 작동합니다. – Wh1T3h4Ck5

관련 문제