繁体   English   中英

提取封装在标签内的字符串的某些部分

[英]Extracting certain part of string encapsulated inside tag

我正在处理大型字符串,并且想要实现正则表达式或类似的解决方案以从字符串中提取特定部分。 我要提取的部分由字符串内的[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

您可以使用以下正则表达式获取标记内的子字符串:

\[test\s*](.*?)\[\/test]

您需要对此正则表达式使用preg_match_all

正则表达式演示

IDEONE演示

$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
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM