2016-10-13 6 views
1

특정 항목으로 시작하는 큰 문자열에서 두 개의 쉼표 사이에있는 문자열을 제거하려고합니다.PHP는 문자열이 특정 항목으로 시작하는 두 쉼표 사이의 문자열에서 문자열을 제거합니다.

#navMain ul li a,.navBreadCrumb1 .nav1 ul li,.top-specials 

내가 .navBreadCrumb1을 선택하는 쿼리를 가지고 있고 위의 문자열이 될 것입니다, 그래서 다음에 쉼표 .navBreadCrumb1에서 모든 것을 제거 할 수 있어야합니다 - :

그래서이 큰 문자열입니다 -

내가 -

#navMain ul li a,.top-specials 

쿼리 (이 경우 내가 #navMain UL 리튬 a를 제거하기 위해 필요한 것, 즉이이 #navMain 선택한 수) 여러 항목을 선택할 수 있습니다 꽤 쓸데없는 preg_replace()와 나는 그것을 사용하기 위해 그것을 사용해야 만하지만 솔직히 단서가 없다고 생각합니다.

아무도 도와 줄 수 있습니까? #navMain ul li a,.top-specials

$string = '#navMain ul li a,.navBreadCrumb1 .nav1 ul li,.top-specials'; 
$stringArray = explode(',', $string); 
$stringNew = $stringArray[0].','.$stringArray[2]; 
echo $stringNew; 

결과 :

+2

이미 가지고있는 것을 보여줄 수있어 거기에서 가져갈 수 있습니까? – RST

+3

[PHP 패턴 구문] (http://php.net/manual/en/reference.pcre.pattern.syntax.php). '.'가 이스케이프 될 필요가 있고'[^,] *'가','이외의 0+ 문자와 일치 할 때, 어떤 패턴을 생각해 낼 수 있습니까 ('/'와'/' 당신의 패턴 주위)? –

+1

답변으로 문제가 해결되면 답변 수락을 고려하십시오. 다음은 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work가 여기로 돌아와서 진드기/체크 표시가 녹색으로 바뀔 때까지 동일한 작업을 수행하는 방법입니다. 이것은 커뮤니티에 알리고 해결책을 찾았습니다. 그렇지 않으면, 다른 사람들은 그 질문이 여전히 열려 있다고 생각할 수 있으며 (더) 답변을 게시하고 싶을 수도 있습니다. * 스택에 오신 것을 환영합니다! * –

답변

1

는 두 쉼표 사이에 텍스트의 한 부분을 없애려고하는 경우 여기에 하나의 예이며,이 작업을 수행하는 방법은 여러 가지가 있습니다 이 예제 만 문제가 이루어져야 가정은 다음과 같습니다

  • 문자열의 배열이 3 개 항목을 반환합니다
  • 그것은 정말 그냥 문자열이며 정규식 패턴을 사용하여 또 다른 배열을 얻을 수 preg_match()를 사용하여, 당신은

이제 문자열을 폭발 후 정말 원하는 부분을 연결하는 것만 큼 쉽게

  • 를 마크 업하지 :

    (.*?,)(.*?,)(.*) 
    

    첫 번째 그룹은 첫 번째 쉼표까지 일치하고 두 번째 그룹은 다음 쉼표까지 일치 한 다음 나머지 문자열과 일치합니다.당신은 위에서 $string를 사용하여, 다음과 같이 그것을 코드 수 :

    $pattern = '/(.*?,)(.*?,)(.*)/'; 
    preg_match($pattern, $string, $matches); 
    

    $matches이 배열 포함됩니다 : 당신이 합치 끝날 것이기

    Array 
    (
        [0] => #navMain ul li a,.navBreadCrumb1 .nav1 ul li,.top-specials 
        [1] => #navMain ul li a, 
        [2] => .navBreadCrumb1 .nav1 ul li, 
        [3] => .top-specials 
    ) 
    

    당신이 찾고있는 결과를 얻기를 $matches[1] . ',' . $matches[3]

    입니다. 예를 들어 regex lookarounds을 사용하여 실험하고 사용할 수있는 다른 정규식 패턴은

    입니다. 우리는 당신이있어 정확히 포함 만들

    이제
    ,.navBreadCrumb1 .nav1 ul li 
    

    $newString합니다 (preg_replace()의 결과) : 16,

    $lookaround = '/(?=,)(.*?)(?=,)/'; 
    $newString = preg_replace($lookaround, '', $string); 
    

    는 패턴 때문에 문자열의 첫 번째와 두 번째 쉼표의 관계의 아래의 텍스트를 일치 심지어 당신이 문자열을 많이 검사하는 경우 정규식이 특히 효율적이지 않더라도 찾고 있습니다. 연결은 없으며 패턴은 이전에 제공 한 예제보다 훨씬 약합니다. 우리는 기본적으로 첫 번째 쉼표의 섹션을 다음 쉼표로 바꿔서 원하는 문자열을 남겨 둡니다.