2017-02-07 3 views
0

functionName('MATCH_1') ;, functionName("MATCH2"); 및 ... functionName ('MATCH_X') ;을 찾고 다음 텍스트로 MATCH_XXX을 추출하려고합니다.php preg_match_all 함수의 PHP 파일에있는 함수 매개 변수

텍스트 : 일부 텍스트 functionName ('MATCH_1'); 및 기타 텍스트 functionName ("MATCH_2"); 많은 다른 텍스트.

또는 다음 줄에 더 많은 functionName ('MATCH_X'); ... 텍스트 더보기.

나는 싶어 MATCH_1, MATCH2MATCH_X

내 시도 :

<?php 
preg_match_all('#functionName\s*\(\s*(\'|")(.*)(\'|")\s*\)\s*;#im', $content,$matches); 

하지만 내 정규식 내가 원하는 것을하지 않습니다.RegEx가 보여야하는 것처럼 설명해 주시겠습니까? 그리고 왜 그가 그렇게 작동합니다.

관련 raiserle는

+0

'$ content'를 재현 가능한 형식으로 제공 할 수 있습니까? '^'또는'$'가 없으면'm' 수식어는 쓸모가 없습니다. – chris85

+2

'. *'을'. *?'또는'[^ "\ '] *'로 대체하십시오. –

+0

@ chris85 :''m''이 쓸모없는 이유 – raiserle

답변

1

$content = "The text: Some text functionName('MATCH_1'); and other text functionName(\"MATCH_2\") ; and many another text. Or many more in next line functionName('MATCH_X'); ... more text."; 

preg_match_all('#functionName\s*\(\s*(\'|")(.*?)(\'|")\s*\)\s*;#im', $content,$matches); 

var_dump($matches); 

시도하고 당신은 당신이 $matches[2]에서 원하는 것을해야한다.

변경된 내용은 정규식의 .* 부분 뒤에 ? 부분을 추가하여 욕심이 없도록 만듭니다 (가장 긴 일치 대신 가능한 가장 짧은 문자열을 찾습니다). 이렇게하면 성능이 떨어집니다. 이유 및 자세한 설명에 대한 설명은 here을 참조하십시오.

+0

감사합니다.''? ' '. *''는 정확하게 작동합니다. 링크는 완벽합니다. ''MATCH_1 ');?> functionName ('MATCH2''는 이제 맞습니다. – raiserle