你好,这是我的字符串
data {'1' => 'anything', '2' => '5', '3' => 'anything'}
data {'1' => 'anything', '2' => '5', '3' => 'anything', '7' => 'anything'}
data {'1' => 'anything', '2' => '6', '3' => 'anything'}
data {'1' => 'anything', '5' => 'anything', '2' => '5', '3' => 'anything'}
我想使用regex并获取其中存在'2' => '5'
的每一行。
有些像
数据{之前的所有内容('2' => '5'
)之后的所有内容}
我的问题是如何传递我想要的东西之前和之后存在的一切('2' => '5'
)?
这是我的正则表达式。请修复
data'h*[{](what should i use here to pass everything exists before)[']2[']'h*[=][>]'h*[']5['](what should i use here to pass everything exists after)[}]
只要得到这条线
data {'1' => 'anything', '2' => '5', '3' => 'anything'}
data {'1' => 'anything', '2' => '5', '3' => 'anything', '7' => 'anything'}
data {'1' => 'anything', '5' => 'anything', '2' => '5', '3' => 'anything'}
请修复我的正则表达式
感谢您的回答,但还有一个问题。。如果我的字符串是
data {'1' => 'anything
anynew line inside of 1', '2' => '5', '3' => 'anything'}
data {'1' => 'anything', '2' => '5', '3' => 'anything', '7' => 'anything'}
data {'1' => 'anything', '2' => '6', '3' => 'anything'}
data {'1' => 'anything', '5' => 'anything', '2' => '5', '3' => 'anything'}
(我使用新的行和''
中的其他行)它不会得到那行!!!!!!!!!!!!!我该怎么办?当我在每行中有几行时,.*
不起作用我需要获取前后的所有内容(包括行和…)
要捕获一个或多个'key' => 'value',
零件,请使用以下方法:
(('s*'[^']*''s*=>'s*'[^']*''s*,'s*)*)
但是,你可以在没有完全匹配模式的情况下检查一行是否包含你的字符串:
preg_match("#'2' => '5'#", $line);
更新:如果要捕获多行文本,请使用严格匹配的模式:
$content = "data {'1' => 'anything
anynew line inside of 1', '2' => '5', '3' => 'anything'}
data {'1' => 'anything', '2' => '5', '3' => 'anything', '7' => 'anything'}
data {'1' => 'anything', '2' => '6', '3' => 'anything'}
data {'1' => 'anything', '5' => 'anything', '2' => '5', '3' => 'anything'}";
preg_match_all("#data''s*''{((''s*'[^']*'''s*=>''s*'[^']*'''s*,''s*)*)''s*'2'''s*=>''s*'5'''s*((''s*,''s*'[^']*'''s*=>''s*'[^']*'''s*)*)#", $content, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
echo "BEFORE: " . $match[1] . "<br />";
echo "AFTER: " . $match[3] . "<br />";
echo "<hr />";
}
我注意:如果您是生成此数据的人,您应该使用更好的格式。例如,JSON流对于多行内容数据结构是一个很好的解决方案。您可以很容易地找到适用于PHP的JSON流解析器。