我有一个正则表达式,匹配<anything>
之间的所有内容,我正在使用它:
'@<([\w]+)>@'
今天但我相信可能有更好的方法吗?
/ Tobias
答案 0 :(得分:1)
\w
与你所说的一切都不匹配[a-zA-Z0-9_]
。假设您以松散的方式使用“所有内容”并且\w
是您想要的,则\w
周围不需要方括号。否则没关系。
答案 1 :(得分:1)
如果“任何”是“除了>
字符之外的任何内容”,那么您可以:
@<([^>]+)>@
测试将显示这种情况是好还是差。
另外,您确定需要优化吗?你原来的正则表达式应该做到它应该做什么吗?
答案 2 :(得分:0)
最好使用PHP字符串函数执行此任务。它会更快,也不会太复杂。
例如:
$string = "abcd<xyz>ab<c>d";
$curr_offset = 0;
$matches = array();
$opening_tag_pos = strpos($string, '<', $curr_offset);
while($opening_tag_pos !== false)
{
$curr_offset = $opening_tag_pos;
$closing_tag_pos = strpos($string, '>', $curr_offset);
$matches[] = substr($string, $opening_tag_pos+1, ($closing_tag_pos-$opening_tag_pos-1));
$curr_offset = $closing_tag_pos;
$opening_tag_pos = strpos($string, '<', $curr_offset);
}
/*
$matches = Array ( [0] => xyz [1] => c )
*/
当然,如果您尝试解析HTML或XML,请使用XHTML解析器
答案 3 :(得分:-1)
看起来不错。什么不是最佳的?
如果您正在尝试解析HTML,您可能还需要考虑其他正则表达式: RegEx match open tags except XHTML self-contained tags