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