문제

나는 줄이있다 :

이것은 텍스트, "당신의 잔액이 왼쪽 $ 0.10", 끝 0입니다.

이중 인용문 사이에 문자열을 추출하고 텍스트 만 (이중 인용문없이)를 가질 수 있습니까?

당신의 잔액은 $ 0.10을 남겼습니다

나는 시도했다 preg_match_all() 그러나 운이 없습니다.

도움이 되었습니까?

해결책

형식이 동일하게 유지되는 한 정규 표현식을 사용하여이를 수행 할 수 있습니다. "([^"]+)" 패턴과 일치합니다

  • 이중 쿼트
  • 적어도 하나의 비 더블 쿼트
  • 이중 쿼트

주위의 괄호 [^"]+ 해당 부분이 별도의 그룹으로 반환 될 것임을 의미합니다.

<?php

$str  = 'This is a text, "Your Balance left $0.10", End 0';

//forward slashes are the start and end delimeters
//third parameter is the array we want to fill with matches
if (preg_match('/"([^"]+)"/', $str, $m)) {
    print $m[1];   
} else {
   //preg_match returns the number of matches found, 
   //so if here didn't match pattern
}

//output: Your Balance left $0.10

다른 팁

전체 특집 문자열 파서를 찾는 모든 사람들을 위해 다음을 시도하십시오.

(?:(?:"(?:\\"|[^"])+")|(?:'(?:\\'|[^'])+'));

preg_match에서 사용 :

$haystack = "something else before 'Lars\' Teststring in quotes' something else after";
preg_match("/(?:(?:\"(?:\\\\\"|[^\"])+\")|(?:'(?:\\\'|[^'])+'))/is",$haystack,$match);

보고:

Array
(
    [0] => 'Lars\' Teststring in quotes'
)

이것은 단일 및 이중 인용 문자열 조각과 함께 작동합니다.

이 시도 :

preg_match_all('`"([^"]*)"`', $string, $results);

추출 된 모든 문자열을 $ 결과로 가져와야합니다 [1].

다른 답변과 달리 이것은 탈출을 지원합니다 "string with \" quote in it".

$content = stripslashes(preg_match('/"((?:[^"]|\\\\.)*)"/'));

정규 표현 '"([^\\"]+)"' 두 개의 이중 인용문 사이에 일치합니다.

$string = '"Your Balance left $0.10", End 0';
preg_match('"([^\\"]+)"', $string, $result);
echo $result[0];

str_replace를 사용하고 인용문을 피하십시오.

str_replace("\"","",$yourString);

편집하다:

죄송합니다. 두 번째 인용문 후 텍스트가 있다는 것을 알지 못했습니다. 이 경우, 나는 단순히 2 개의 검색, 하나는 첫 번째 인용문과 두 번째 견적을위한 1 개를 검색 한 다음, 둘 사이의 모든 것들을 여분의 모든 것들로 수행합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top