试图将两个独立的正则表达式合并为一个


Trying to merge two separate regular expressions into one

我需要提取一个由括号和单引号括起来的字符串。目前,我正在使用两个正则表达式模式来完成这项工作。使用第一个正则表达式,我从括号中检索字符串,而字符串仍然包含单引号,使用第二个正则表达式,我可以从中去掉单引号。现在,我想一步完成这项工作。在过去的一个多小时里,我一直在试验一些模式,但没有任何可行的结果;可能是由于我有限的正则表达式知识。所以,你提供给我的任何反馈都会很有帮助。我也欢迎除正则表达式之外的任何解决方案。

下面是一个需要解析的示例字符串。

$string = "[('minute stroller workout', 9.0), ('week', 1.0), ('leaving', 1.0), ('times', 1.0), ('guilt', 1.0), ('baby', 1.0), ('beginning', 1.0)]";
# Strip parentheses
preg_match_all('#'((.*?)')#', $string, $match);
# I am using the first match here
echo $match[1][0]; // output = 'minute stroller workout', 9.0
# Strip single quotes and extract the string
preg_match('~(["''])([^"'']+)'1~', $match[1][0], $matches);
echo $matches[2]; // output = minute stroller workout (i.e. what we are looking for)  

如果我没理解错的话

preg_match_all('/'(''(['s'w]*)'', (['d.]*)')/', $string, $match);

字符串

的输出
array(3) {
  [0]=>
  array(7) {
    [0]=>
    string(32) "('minute stroller workout', 9.0)"
    [1]=>
    string(13) "('week', 1.0)"
    [2]=>
    string(16) "('leaving', 1.0)"
    [3]=>
    string(14) "('times', 1.0)"
    [4]=>
    string(14) "('guilt', 1.0)"
    [5]=>
    string(13) "('baby', 1.0)"
    [6]=>
    string(18) "('beginning', 1.0)"
  }
  [1]=>
  array(7) {
    [0]=>
    string(23) "minute stroller workout"
    [1]=>
    string(4) "week"
    [2]=>
    string(7) "leaving"
    [3]=>
    string(5) "times"
    [4]=>
    string(5) "guilt"
    [5]=>
    string(4) "baby"
    [6]=>
    string(9) "beginning"
  }
  [2]=>
  array(7) {
    [0]=>
    string(3) "9.0"
    [1]=>
    string(3) "1.0"
    [2]=>
    string(3) "1.0"
    [3]=>
    string(3) "1.0"
    [4]=>
    string(3) "1.0"
    [5]=>
    string(3) "1.0"
    [6]=>
    string(3) "1.0"
  }
}

你可以使用这个正则表达式:

preg_match("#'('([^']+)#", $string, $matches);
echo $matches[1];
//=> minute stroller workout