-1

给定以下字符串:

  • [下载 id="1"]
  • [下载id="1" attr=""]
  • [下载attr=""id="1"]
  • [下载attr="" id="1" attr=""]

ID 始终是一个数字。我需要一个正则表达式,它总是给我通过 PHP 使用的数字,最好通过http://www.solmetra.com/scripts/regex/index.php演示。

4

6 回答 6

1
preg_match_all('/id="(\d+)"/', $data, $matches);
于 2012-06-25T06:19:07.913 回答
0

假设您将始终拥有一个id字段并且始终将其括在引号 ( ") 中,您可以尝试像这样的正则表达式:id="(\d+)". 这将捕获该数字并将其放入一个组中。您可以在此处查看如何访问这些组。

正如建议的那样,如果您想匹配更多字段,我建议您删除正则表达式并找到能够解析您传递的字符串的东西。

于 2012-06-25T06:19:12.313 回答
0

这也将是一个解决方案

\[download[^\]]*id="(\d*)

您在捕获组 1 中找到了结果

在 Regexr 上查看

\[download匹配“[下载”

[^\]]*是一个否定字符类,匹配不是“]”的所有内容(o 或更多次)

id="从字面上匹配 "id=""

(\d*)是匹配 0 个或多个数字的捕获组,您可以将 更改*为 a+以匹配一个或多个。

每个程序员都应该知道的关于正则表达式的知识

于 2012-06-25T06:22:38.953 回答
0

试试这个:

/\[download.*?id=\"(\d+)\"/

调用函数:

preg_match_all('/\[download.*?id=\"(\d+)\"/', '{{your data}}', $arr, PREG_PATTERN_ORDER);
于 2012-06-25T06:18:25.813 回答
0

您可以轻松使用 ini 文件,而不需要使用正则表达式,例如:

测试.ini

[download]
id=1
attr = ""
[download2]
id=2
attr = "d2"

和 index.php

$ini = parse_ini_file('test.ini', true);
print_r($ini);
于 2012-06-25T06:30:15.787 回答
0

这是我的解决方案:

<?php

    $content =
<<<TEST
[download id="1"]
[download id="2" attr=""]
[download attr="" id="3"]
[download attr="" id="4" attr=""]
TEST;

    $pattern = '/\[download.*[ ]+id="(?P<id>[0-9]+)".*\]/u';

    if (preg_match_all($pattern, $content, $matches))
        var_dump($matches);

?>

适用于单行输入(读取$matches['id'][0])或多行输入(如示例,迭代$matches['id']数组)。

笔记:

  • 不要使用带有 start ^和 end $分隔符的preg_match ,而是使用不带分隔符的 preg_match_all
  • 不要使用“s”PCRE_DOTALL 修饰符
  • 如果您希望正则表达式与“下载”或“下载”一起使用,请使用“i”修饰符
  • 如果输入是 UTF-8 编码的字符串,则使用“u”修饰符

http://it.php.net/manual/en/function.preg-match-all.php

http://it.php.net/manual/en/reference.pcre.pattern.modifiers.php

上面的示例将输出:

array(3) {
  [0]=>
  array(4) {
    [0]=>
    string(17) "[download id="1"]"
    [1]=>
    string(25) "[download id="2" attr=""]"
    [2]=>
    string(25) "[download attr="" id="3"]"
    [3]=>
    string(33) "[download attr="" id="4" attr=""]"
  }
  ["id"]=>
  array(4) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "2"
    [2]=>
    string(1) "3"
    [3]=>
    string(1) "4"
  }
  [1]=>
  array(4) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "2"
    [2]=>
    string(1) "3"
    [3]=>
    string(1) "4"
  }
}

因此,您可以读取$matches['id']数组上循环的 ID 属性 :)

于 2012-06-25T12:48:04.480 回答