2017-10-09 14 views
-5

정규 표현식을 만들기 위해 여러 조합을 시도했지만 실패했습니다.올바른 RegEx를 만드는 방법은 무엇입니까?

내가 이것을 읽고 싶은 입력 :

[@Homer Jay Simpson](id:homer) is a good guy. 

Array (
    [0] => "[@Homer Jay Simpson](id:homer)", 
    [1] => "Homer Jay Simpson", 
    [2] => "homer" 
) 

감사를 얻을! 시시한 조금 후

+0

정규식이 대괄호로 묶여있는 문자열을 더 잘 분해하려고하는 경우 @rika를 잘 모르겠습니다. – shashi

답변

2

이 정규식 당신을 위해 작동합니다

\[@([^\]]+)\]\(id:([^)]+)\) 

처럼 사용 :

$str = "[@Homer Jay Simpson](id:homer) is a good guy."; 
preg_match('#\[@([^\]]+)\]\(id:([^)]+)\)#', $str, $matches); 
print_r($matches); 

는 생산 :

Array 
(
    [0] => [@Homer Jay Simpson](id:homer) 
    [1] => Homer Jay Simpson 
    [2] => homer 
) 

팁 정규식 패턴 만들기, 작게 시작하고 빌드하기 그것의 끝 부분에. 처음에는 대괄호 안의 숫자를 \[@([^\]]+)\]과 일치시키는 것으로 시작하여 그 나머지 부분을 연결했습니다. 전체 로그 here

0

http://www.phpliveregex.com/p/lAg

preg_match("/\[\@(.*?)\]\(id:(.*?)\)/", $str, $matches); 
Var_dump($matches); 

이 캡처 괄호 []() 사이에 무엇을.
\은 reges를 기호를 리터럴로 읽습니다.
.*?은 길이가있는 경우 게으른 캡처를 의미합니다.