我正在尝试从以下示例字符串中提取
\"
之间的字符串:xxxx\"Text Here\";\"Text Here2\"yyyy
。也就是说,我想得到两个字符串:Text Here
和Text Here2
。
基于https://stackoverflow.com/a/1445528/4381271,我编码了以下内容:
$input='xxxx\"Text Here\";\"Text Here2\"yyyy';
$delimiter = '#';
$startTag = '\"';
$endTag = '\"';
$regex = $delimiter . preg_quote($startTag, $delimiter)
. '.*?'
. preg_quote($endTag, $delimiter)
. $delimiter
. 's';
preg_match_all($regex,$input,$matches);
var_dump($matches );
输出是
array(1) { [0]=> array(2) { [0]=> string(13) "\"Text Here\"" [1]=> string(14) "\"Text Here2\"" } }
我的问题是:
Text Here
和 Text Here2
。\"
位于结果中。有没有办法通过正则表达式排除它们?二维数组预计为
preg_match_all()
返回作为第一级别找到的每个匹配项,并将这些匹配中的每个捕获组作为第二级别返回。由于您没有使用捕获组,因此会返回整个匹配项,其中还包括分隔符,因此添加组是仅获取您真正感兴趣的部分的方法:
$input='xxxx\"Text Here\";\"Text Here2\"yyyy';
$delimiter = '#';
$startTag = '\"';
$endTag = '\"';
$regex = $delimiter . preg_quote($startTag, $delimiter)
. '(.*?)' // grouo to get text inside the quotes
. preg_quote($endTag, $delimiter)
. $delimiter
. 's';
preg_match_all($regex, $input, $matches);
var_dump($matches[1]);