30

我有一个字符串:

这是一条文本,“您的余额还剩 0.10 美元”,结束 0

如何提取双引号之间的字符串并且只有文本(没有双引号):

您的余额还剩 0.10 美元

我试过preg_match_all()但没有运气。

4

6 回答 6

71

只要格式保持不变,您就可以使用正则表达式执行此操作。"([^"]+)"将匹配模式

  • 双引号
  • 至少一个非双引号
  • 双引号

括号周围的[^"]+ 意思是该部分将作为一个单独的组返回。

<?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
于 2009-06-19T09:28:09.033 回答
18

对于每个寻找功能齐全的字符串解析器的人,试试这个:

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

在 preg_match 中使用:

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

回报:

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

这适用于单引号和双引号字符串片段。

于 2011-08-19T14:50:04.720 回答
9

试试这个 :

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

您应该在 $results[1] 中获取所有提取的字符串。

于 2009-06-19T09:28:26.520 回答
6

与其他答案不同,这支持转义,例如"string with \" quote in it".

$content = stripslashes(preg_match('/"((?:[^"]|\\\\.)*)"/'));
于 2009-06-19T10:52:48.190 回答
-1

正则表达式'"([^\\"]+)"'将匹配两个双引号之间的任何内容。

$string = '"Your Balance left $0.10", End 0';
preg_match('"([^\\"]+)"', $string, $result);
echo $result[0];
于 2009-06-19T09:26:18.833 回答
-9

只需使用 str_replace 并转义引号:

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

编辑:

抱歉,没有看到第二个引用之后有文字。在这种情况下,我只需进行 2 次搜索,一个用于第一个报价,一个用于第二个报价,然后执行 substr 以在两者之间添加所有内容。

于 2009-06-19T09:19:00.207 回答