在以下代码中,我在单引号或双引号之间得到了字符串数据。是否可以将其组合为单个命令或简化?
示例:
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
答案 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的反向引用请注意,您不必在字符类中转义'
。