给定以下字符串:
- [下载 id="1"]
- [下载id="1" attr=""]
- [下载attr=""id="1"]
- [下载attr="" id="1" attr=""]
ID 始终是一个数字。我需要一个正则表达式,它总是给我通过 PHP 使用的数字,最好通过http://www.solmetra.com/scripts/regex/index.php演示。
给定以下字符串:
ID 始终是一个数字。我需要一个正则表达式,它总是给我通过 PHP 使用的数字,最好通过http://www.solmetra.com/scripts/regex/index.php演示。
preg_match_all('/id="(\d+)"/', $data, $matches);
假设您将始终拥有一个id
字段并且始终将其括在引号 ( "
) 中,您可以尝试像这样的正则表达式:id="(\d+)"
. 这将捕获该数字并将其放入一个组中。您可以在此处查看如何访问这些组。
正如建议的那样,如果您想匹配更多字段,我建议您删除正则表达式并找到能够解析您传递的字符串的东西。
这也将是一个解决方案
\[download[^\]]*id="(\d*)
您在捕获组 1 中找到了结果
\[download
匹配“[下载”
[^\]]*
是一个否定字符类,匹配不是“]”的所有内容(o 或更多次)
id="
从字面上匹配 "id=""
(\d*)
是匹配 0 个或多个数字的捕获组,您可以将 更改*
为 a+
以匹配一个或多个。
试试这个:
/\[download.*?id=\"(\d+)\"/
调用函数:
preg_match_all('/\[download.*?id=\"(\d+)\"/', '{{your data}}', $arr, PREG_PATTERN_ORDER);
您可以轻松使用 ini 文件,而不需要使用正则表达式,例如:
测试.ini
[download]
id=1
attr = ""
[download2]
id=2
attr = "d2"
和 index.php
$ini = parse_ini_file('test.ini', true);
print_r($ini);
这是我的解决方案:
<?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']数组)。
笔记:
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 属性 :)