0

假设我将以下内容放入文本框中:

1|[Guangzhou Evergrande](//www.gzevergrandefc.com/)|6|5-1-0|+15|**16**
2|[Shandong Luneng](//www.lunengsports.com/)|7|5-1-1|+7|**16**
3|[Qingdao Jonoon](//www.zhongnengfc.com/)|7|4-3-0|+4|**15**
4|[Beijing Guoan](//www.fcguoan.com/)|7|3-3-1|+2|**12**

当我按下回车键时,它会将[and](and之间的)内容放入新的行中,如下所示:

if ($name == "NAME_HERE") $name = "[".$name."](URL_HERE)";

我试着做preg_match和使用这个模式:$pattern = '/^[/';$pattern_end = '/^]/';名字——jsut to test——但我不能让它工作....

这是我到目前为止所拥有的:

$string = '1|[Guangzhou Evergrande](//www.gzevergrandefc.com/)|6|5-1-0|+15|**16**';
$pattern =  '/\[(.*?\)].*?\((.*?)\)/';
$replacement = 'if ($name == "{1}") $name = "[".$name."]({2})";';
echo preg_replace($pattern, $replacement, $string);
4

2 回答 2

2

你的模式应该是

 '/\[(.*?)\]\((.*?)\)/' 

因为 [ ] 和 ( ) 是特殊字符。使用 preg_match_all() 函数

当您使用 preg_match_all 时,您可以将 () 用于子匹配(子模式)

例子

<?php

$string = '1|[Guangzhou Evergrande](//www.gzevergrandefc.com/)|6|5-1-0|+15|**16**';
$matches = array();
preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $string, $matches);

var_dump($matches);
?>
于 2013-04-29T21:12:03.693 回答
1

也许我不完全理解你在这里做什么,但是,我看到了一个可以毫不费力地爆炸的数据结构。例如:

function get_football( $text ) {
    $r = array();
    $t = explode("\n", $text );
    foreach( $t as $l ) {
        $n = explode("|", $l);
        $r[] = $n;
    }
    return( $r );
}

这将为您提供一组结构良好的数据,您可以通过 foreach() 进行进一步处理。如果原始文本存储在 $variable0 中,print_r( get_football( $variable0 ) );将显示一个不错的结构:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => [Guangzhou Evergrande](//www.gzevergrandefc.com/)
            [2] => 6
            [3] => 5-1-0
            [4] => +15
            [5] => **16**
        )

    [1] => Array

当然,这个 $n[1] 名称可以在循环中进一步分解。无论如何,此后,您可以使用 foreach() 循环而不是硬编码菜单选项来遍历您正在构建的任何菜单。只是需要考虑的事情。

于 2013-04-29T21:28:28.920 回答