2017-03-22 1 views
1

저는 슬프게도 정규식에 익숙하지 않습니다. 그래서 누군가가 저를 도울 수 있습니까? 나는이 문자열이 있습니다PHP는 preg가 일치하는 문자열을 얻습니다.

$theString = 'MYSTRING-[DDAADD]-IS_SO_BEAUTYFULL' 

를 그리고 모두가 내가 원하는 것을 내가 'DDAADD'을 얻어야한다이 예에서, 2 대괄호 사이의 내용을 추출하는 것입니다. 나는 그것을 어떻게 도달 할

$first = 'MYSTRING-'; 
$second = 'DDAADD'; 
$third = '-IS_SO_BEAUTYFULL'; 

:

대상은 내가 3 문자열을 얻을 내 문자열을 폭발하는 것입니다?

내가는 preg_match와 그것을 시도하지만, 나는 그것이 동작하지 않습니다 :

preg_match('/[^a-zA-Z0-9\[\]]+/', $string, $matches); 

나는이 시도 :

preg_match_all('/[A-Z\[\]]+/', $string, $matches); 

가 그럼 난하지만 '없이, 내 세 개의 문자열을 가지고 - '...

나는 preg_split 아 파크 그것을 시도하지만 제대로 내 목표에 도달하지 않습니다

preg_split("/\[([^\]]+)\]/", $myString); 

그렇다면 DDAADD의 중심 부분을 제외하고 올바른 두 번째 문자열 만 가져 왔습니다 ...

누군가가 도와 줄 수 있습니까?

+1

'DDAADD'값을 하나만 가져와야합니까? 'preg_split ('~ [] [] ~', $ s)''$ first','$ second','$ third'와 같은 3 개의 값을 얻으려면? –

+0

예 - 3 개의 문자열이 필요합니다. 답변 해 주셔서 감사합니다! – goldlife

답변

2

[][]+ 정규식을 사용 preg_split 하나 이상의 [ 또는 ] 기호에 맞게 다음 sample demo

$s = "MYSTRING-[DDAADD]-IS_SO_BEAUTYFULL"; 
$arr = preg_split('~[][]+~', $s); 
print_r($arr); 

출력 :

Array 
(
    [0] => MYSTRING- 
    [1] => DDAADD 
    [2] => -IS_SO_BEAUTYFULL 
) 

또 다른 방법은 preg_match\[([^][]+)]와 정규식을 사용하는 것입니다 (또는 \[([A-Z]+)]) :

$s = "MYSTRING-[DDAADD]-IS_SO_BEAUTYFULL"; 
if (preg_match('~\[([A-Z]+)]~', $s, $res)) { 
    echo($res[1] . "\n"); 
} // => DDAADD 
if (preg_match('~\[([^][]+)]~', $s, $res)) { 
    print_r($res[1]); 
} // => DDAADD 

([A-Z]+) 그룹 1 하나 이상의 대문자 (또는 [^][]+[] 1 개보다 이상의 문자 다른 경기)과 ] 리터럴 ] 일치로 캡처, \[[ 일치, 여기

another demo를 참조하십시오. 값은 $res[1] 안에 있습니다.

+1

이 작품은 나를 위해 .. 감사합니다 !! – goldlife

관련 문제