【发布时间】:2015-07-27 20:07:02
【问题描述】:
我正在处理大字符串,并希望实现一个正则表达式或类似的解决方案来从字符串中提取某个部分。我要提取的部分由字符串内的[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
【问题讨论】:
-
你看过正则表达式来提取 bbcode 吗?也许,stackoverflow.com/questions/17508013/url-bbcode-regex
-
\[test\\s\](.*)\[\/test\] 在 MATCH 1 上。regex101.com/#pcre