2016-06-13 3 views
1

특수 태그 내부에 공간이없는 문자 만 얻을 수 있습니다 :정규식 내가 문자열이 텍스트가

퍼센트 후안 %

% 후안 곤잘레스 %

을 그리고 난 단지 %를 얻을 수 있도록하려면 후안 % 우주와 하나가 아니라, 나는 여러 Regexes witout 행운을 시도했습니다.

/%(.*)%/U 

을하지만 내가 추가하고 [^ \ S]와 함께 연주 시도, 두 가지를 얻을 수 있지만 나던 작동 : 내가 현재 사용합니다.

도움이 필요하십니까?

+2

연구 문자 클래스를 설명했다. –

+1

나는 어떻게 그걸로 _played_ 모르겠지만'/ % ([^ \ s] +) % /'는 효과가있다. – AbraCadaver

+1

이 상황에서 무엇을 캡처 하시겠습니까? '.................................. % Juan % 후안 곤잘레스 % michel % herbert philippe %% le_gros_Louis %'? * ("michel"은 쌍으로 된'%'밖에 있음을 유의하십시오.) * –

답변

1

.은 개행을 제외한 모든 문자와 일치합니다. /U ungreedy 모드는 .* 만 지연시키고 %부터 %의 오른쪽에있는 첫 번째 %까지 텍스트를 캡처합니다. 당신의 문자열 %...% 한 쌍을 포함 할 경우, regex demo

\S+ 패턴이 공백 이외의 1+ 문자, 전체 [^\h%] 부정 문자와 일치 참조

/%(\S+)%/ 

사용할 수 있습니다

수평 공백 이외의 모든 문자와 일치하는 클래스 및 % 심볼입니다. 여러 %...%쌍이있는 경우

, 당신은

/%([^\h%]+)%/ 

\h 어떤 수평 공백과 일치 another regex demo을 참조 사용할 수 있습니다.

PHP demo

:

$re = '/%([^\h%]+)%/'; 
$str = "%Juan%\n%Juan Gonzalez%"; 
preg_match_all($re, $str, $matches); 
print_r($matches[1]); 
-1

not the one with the Space =하지 [^ + 공간 \s + ]이있다.

그러나 %도 포함 할 수 없습니다.

는 추가 신용 들어,/또한 공간
와 하나의 종류의 균형 구분 설정을 보장하기 위해 일치해야합니다 수 %([^\s%]+)%

을 밝혀 작동하지만.

(?:%([^\s%]+)%|%[^%]*%(*SKIP)(*FAIL))

(?: 
     % 
     ([^\s%]+)     # (1), Tag you need 
     % 
    | 
     % [^%]* % (*SKIP)(*FAIL)  # Consume, but don't match other tags 
) 
관련 문제