PHP는 이중 견적에서 문자열을 추출합니다
-
06-07-2019 - |
문제
나는 줄이있다 :
이것은 텍스트, "당신의 잔액이 왼쪽 $ 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 개를 검색 한 다음, 둘 사이의 모든 것들을 여분의 모든 것들로 수행합니다.
제휴하지 않습니다 StackOverflow