两个动态模式之间的正则表达式

时间:2012-08-02 03:46:07

标签: php regex

我想找到匹配的任何内容

[^1] and [/^1]

例如,如果主题是这样的

sometext[^1]abcdef[/^1]somemoretext[^2]12345[/^2]

我想以abcdef和12345作为元素返回一个数组。

我看了this

我写了这段代码,我无法在[]

之间进行搜索
<?php


$test = '[12345]';

getnumberfromstring($test);

function getnumberfromstring($text)
{
    $pattern= '~(?<=\[)(.*?)(?=\])~';
    $matches= array();
    preg_match($pattern, $text, $matches);

    var_dump($matches);
}

?>

2 个答案:

答案 0 :(得分:1)

您的测试会检查字符串'[12345]',该字符串不适用于[^digit]的“开放”和[\^digit]的“结束”规则。此外,您应该在使用时使用preg_matchpreg_match_all

试试这个:

<?php


$test = 'sometext[^1]abcdef[/^1]somemoretext[^2]12345[/^2]';

getnumberfromstring($test);

function getnumberfromstring($text)
{
    $pattern= '/(?<=\[\^\d\])(.*?)(?=\[\/\^\d\])/';
    $matches= array();
    preg_match_all($pattern, $text, $matches);

    var_dump($matches);
}

?>

答案 1 :(得分:0)

我在php 5.4.5中测试了以下代码:

<?php
$foo = 'sometext[^1]abcdef[/^1]somemoretext[^2]12345[/^2]';    
function getnumberfromstring($text)
{    
    $matches= array();
    # match [^1]...[/^1], [^2]...[/^2]
    preg_match_all('/\[\^(\d+)\]([^\[\]]+)\[\/\^\1\]/', $text, $matches, PREG_SET_ORDER);    
    for($i = 0; $i < count($matches); ++$i)
        printf("%s\n", $matches[$i][2]);
}
getnumberfromstring($foo);

?>

输出:

abcdef
123456