PHP 获取两个字符串之间的内容

问题描述 投票:0回答:1

我正在尝试从以下示例字符串中提取

\"
之间的字符串:
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\"" } }

我的问题是:

  1. 结果是一个二维数组。这是正常的吗?我期待一个一维数组,其中包含元素
    Text Here
    Text Here2
  2. 标签
    \"
    位于结果中。有没有办法通过正则表达式排除它们?
php regex preg-match-all
1个回答
0
投票

二维数组预计为

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]);
© www.soinside.com 2019 - 2024. All rights reserved.