2017-11-23 9 views
1

내 파일의 일부 단락을 제거해야합니다. 일부 문자열로 시작하고 다음과 같은 특수 문자로 끝납니다! 나는 결과를 얻을으로, preg_match_all를 사용하고 , 아래 링크를 찾아으로, preg_match_all http://www.phpliveregex.com/p/m5CPHP preg_match_all 문자열 블록 가져 오기

을 선택하고 난 당신 때문에이 특정한 경우에 정규식에 대한 필요성이 표시되지 않는 출력

0=> array(
    0=>  ip vrf Access-Mgmt 
     rd 65000:3298 
     route-target export 65000:4585 
     route-target export 65000:4717 
     route-target import 65000:4585 
     route-target import 65000:2659 
) 
+0

가 발생했습니다? – Ghost

+0

첫 번째 단락이 필요합니까? 문제는 '!' 다른 모든 단락의 끝 부분에도 존재합니다 ... 그래서, 첫 번째 발생과 일치해야합니까? – sinisake

+0

예 sinisake, 맞습니다 – infi

답변

0

처럼 내가 원하는하시기 바랍니다 첫 번째 부분이 첫 번째 부분 앞에오고 싶다면 !. strstr() 잘 수행합니다. explode('!',$string,2)[0]은 작동하지만 첫 번째 요소에서 원하는 문자열을 추출하기 전에 배열을 생성하기 때문에 덜 직접적인 해킹입니다.

코드 :

echo trim(strstr($string,'!',true)); 

출력 :

ip vrf Access-Mgmt 
rd 65000:3298 
route-target export 65000:4585 
route-target export 65000:4717 
route-target import 65000:4585 
route-target import 65000:2659 

또는 텍스트의 첫 번째 블록을 대상으로, 오히려 Access-Mgmt 블록을 원하지 않을 경우,이 패턴으로 preg_match()를 사용할 수 있습니다 /ip vrf Access-Mgmt[^!]+/Demo 또는 줄 바꿈 줄 바꾸기 문자를 /ip vrf Access-Mgmt[^!]+(?=\R)/으로 트림합니다. 여기

처럼 이러한 호출이 볼 수있는 것입니다 : 당신은 http://www.phpliveregex.com/p/m5H

에서으로, preg_match_all을 체크 아웃 할 수

var_export(preg_match('/ip vrf Access-Mgmt[^!]+/',$string,$out)?$out[0]:'fail'); 
// or 
var_export(preg_match('/ip vrf Access-Mgmt[^!]+(?=\R)/',$string,$out)?$out[0]:'fail'); 
// or 
var_export(preg_match('/ip vrf Access-Mgmt[^!]+/',$string,$out)?trim($out[0]):'fail'); 
-1

내가 조건 로 문자열을 갈라진다했던 ([!^*)!

교체 $ 0 설명 :

(- start capture group 
    [ - start capture group 
    ^! - match anything but ! symbol 
    ] - start capture group 
    * - match 0 or more occurances 
) - start capture group 
! - followed by ! symbol 

$0 - First capture group 

은이 사용 사례가 해결되는지 알려주세요.

출력 : 문제는 무슨 일을

1 => Array(
    0 => Array(
     ip vrf Access-Mgmt 
     rd 65000:3298 
     route-target export 65000:4585 
     route-target export 65000:4717 
     route-target import 65000:4585 
     route-target import 65000:2659 
    ), 
    1 => Array(
     ip vrf Atheeb-VoIP 
     rd 65000:4592 
     import map Atheeb-VoIP_Imp 
     route-target export 65000:6277 
     route-target import 65000:6275 
     route-target import 65000:6276 
     route-target import 65000:6277 
    ), 
    2 => Array(
     ip vrf CISCO 
     rd 65000:1 
     route-target export 65000:1 
     route-target import 65000:1 
    ), 
    3 => Array(
     ip vrf EBU-Modem-DHCP 
     rd 10:10 
     route-target export 65000:6475 
     route-target import 65000:6476 
    ), 
    4 => Array(
     ip vrf ER-DCN 
     rd 65000:3719 
     route-target export 65000:5241 
     route-target import 65000:5241 
     route-target import 65000:5242 
    ), 
    5 => Array(
     ip vrf ER-LTE-Media-Signalling 
     rd 65000:3723 
     route-target export 65000:5245 
     route-target import 65000:5245 
     route-target import 65000:3507 
     route-target import 65000:3511 
     route-target import 65000:5535 
    ), 
    6 => Array(
     ip vrf ER-LTE-OAM 
     rd 65000:3724 
     route-target export 65000:5247 
     route-target import 65000:5247 
    ), 
) 
+0

그것은 하나의 끔찍한 출력 배열입니다! OP가'! '로 구분 된 첫 번째 하위 문자열을 찾고있는 경우 정규식은 좋지 않은 선택입니다. – mickmackusa

+0

@mickmackusa 위의 코드는 첫 번째 substrring을 찾지 않고 전체 문자열을'! '로 구분 된 출력 부분으로 나눕니다. – RamC

+0

그것은 OP가 원하는 것이 아닙니다. 그리고 만약 당신이 단지'!'로 나뉘어져 있다면''explode()가 무엇을위한 것인가. 이것에 대한 정보는 내 대답을 읽을 수 있습니다. – mickmackusa