我正在尝试获取第二个引号的内容以及字符串中的第二个引号。现在我能够得到所有三个引号的内容。我究竟做错了什么?是否可以只在输出数组中打印第二个值?
文本
2014-06-02 11:48:41.519 -0700 Information 94 NICOLE Client "[WebDirect] (207.230.229.204) [207.230.229.204]" opening database "FMServer_Sample" as "Admin".
PHP
if (preg_match_all('~(["\'])([^"\']+)\1~', $line, $matches))
$database_names = $matches[2];
print_r($database);
输出
[WebDirect] (207.230.229.204) [207.230.229.204], FMServer_Sample, Admin
答案 0 :(得分:3)
你可以这样使用它:
$re = '~(["\'])[^"\']+\1[^"\']*(["\'])([^"\']+)\1~';
$str = '2014-06-02 11:48:41.519 -0700 Information 94 NICOLE Client "[WebDirect] (207.230.229.204) [207.230.229.204]" opening database "FMServer_Sample" as "Admin".';
if ( preg_match($re, $str, $m) )
echo $m[3]; // FMServer_Sample
答案 1 :(得分:0)
匹配组从[0]开始,因为您正在使用preg_match_all
,您将获得[3]组。该数组是第一个$ matches数组,因此它也从零开始。您可以像这样使用它:
if (preg_match_all('~(["\'])([^"\']+)\1~', $line, $matches))
$database_names = $matches[0][1];
print_r($database_names);