php新手问题:正则表达式

时间:2011-03-31 08:16:23

标签: php regex line-breaks

我很抱歉我已经要求这个但是找不到解决方案:( 这是我的字符串:(你可以看到它有换行符)

Webname:    [webname]
Username:   [username]
IP:     [IP]

我需要读出方括号内的值。 这是我的代码:

    $pattern = '/\[(.|\n)+?\]/'; // i've used the same syntax for my asp projects, always worked
    preg_match($pattern, $txt, $matches, PREG_OFFSET_CAPTURE);
    echo "matches:".count($matches)."\n\n";
    foreach ($matches as $match) 
    {
        echo $match[0]."\n";
    }

我只获得了2场比赛:[webname]e(???) 我现在正在摆弄这几个小时并且无法找出问题所在......

任何想法? 感谢

4 个答案:

答案 0 :(得分:4)

看起来比以前更复杂。换行符在这里没有任何作用。

$pattern = '/\[(.+?)\]/';
preg_match_all($pattern, $txt, $matches);

print_r($matches);

给出

Array
(
    [0] => Array
        (
            [0] => [webname]
            [1] => [username]
            [2] => [IP]
        )

    [1] => Array
        (
            [0] => webname
            [1] => username
            [2] => IP
        )

)

因此值将在$matches[1]。如果您想要包含括号($matches[0])的值,您还可以省略模式中的括号。

答案 1 :(得分:1)

第一个捕获组(在您的情况下只有一个)位于$matches[1]

答案 2 :(得分:0)

尝试类似

的内容
$pattern = '/\[([^\]]+)\]/';

并使用preg_match_all()获取所有匹配项。

答案 3 :(得分:0)

试试这个

$values = array();

foreach (explode("\n", $text) as $line) {
    if (preg_match('/([^:]++):[^\s]*+(.*+)/', $line, $match)) {
        $values[$match[1]] = $match[2];
    }
}

var_dump($values);