PHP正则表达式优化

时间:2010-12-01 13:39:21

标签: php regex

我有一个正则表达式,匹配<anything>之间的所有内容,我正在使用它:

'@<([\w]+)>@'

今天但我相信可能有更好的方法吗?

/ Tobias

4 个答案:

答案 0 :(得分:1)

顺便说一下,{p> \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