我正在使用大字符串,并希望实现一个正则表达式或类似的解决方案来从字符串中提取某个部分。我要提取的部分由字符串中的[test ][/test]
标记封装。标签外的所有内容都将被删除。我怎么能用PHP有效地做到这一点?
$subject = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
[test ]https://www.test.com/this_a_test[/test]";
$pattern = '~\[test (?|=[\'"]?+([^]"\']++)[\'"]?+]([^[]++)|](([^[]++)))\[/test]~';
$replacement = '$1';
$result = preg_replace($pattern, $replacement, $subject);
var_dump( $result );
当前输出:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. https://www.test.com/this_a_test
期望的输出:
https://www.test.com/this_a_test
答案 0 :(得分:0)
您可以使用以下正则表达式获取标记内的子字符串:
\[test\s*](.*?)\[\/test]
您需要在此正则表达式中使用preg_match_all
。
请参阅regex demo
$re = '~\[test\s*](.*?)\[\/test]~s';
$str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\n[test ]https://www.test.com/this_a_test[/test]";
preg_match_all($re, $str, $matches);
print_r($matches[1]);
输出:
Array
(
[0] => https://www.test.com/this_a_test
)