获取单引号或双引号之间的字符串

时间:2019-12-03 20:11:43

标签: php regex

在以下代码中,我在单引号或双引号之间得到了字符串数据。是否可以将其组合为单个命令或简化?

示例:

 STR_NAME = '12345'
 STR_NAME = "12345"

代码:

$match = "STR_NAME = '12345'";
if (preg_match('/"([^"]+)"/', $match, $m)) {
    $val = $m[1]; //found string in double quotes
  } else {
    if (preg_match("/'([^']+)'/", $match, $m)) {
      $val = $m[1]; //found string in single quotes
    }
  }

输出:

 echo $val;
 12345

2 个答案:

答案 0 :(得分:3)

对找到的第一个引用使用反向引用\1

preg_match('/(["\'])([^\1]+)\1/', $match, $m);
echo $m[2];
  • (["\'])匹配并捕获第1组"'
  • ([^\1]+)匹配并捕获第2组中的一个或多个而不是^捕获第1组中的内容
    • 您可以在此处使用许多与以下引号不匹配的内容,例如(.+?)
  • \1匹配在第1组"'中捕获的内容

STR_NAME = "1234'之类的内容不匹配。

如果数据一致且可预测,那么您也许可以摆脱:

["\']([^"\']+)["\']

或者:

["\'](.+?)["\']

答案 1 :(得分:2)

您可以使用字符类别为(["'])的捕获组来匹配'",并使用backreference来匹配组1。

要匹配两者之间的内容,可以使用.+?匹配至少1个字符。

该值在捕获组2中

(["'])(.+?)\1
  • (["'])捕获组1(用于后向引用)
  • (.+?)匹配除换行符以外的任意字符1倍以上
  • \1对组1的反向引用

Regex demo

请注意,您不必在字符类中转义'