帮看下这个正则需要怎么写? 本帖最后由 aier520 于 2012-04-01 18:49:18 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 基础代码$s = <<< TXT<td>1234567890</td><td>1234567890123</td><td>0987654321</td><td>3210987654321</td><td>1324354657</td><td>1324354657689</td>TXT;preg_match_all('/(\d{13})|(\d{10})/s', $s, $r);print_r($r);Array( [0] => Array ( [0] => 1234567890 [1] => 1234567890123 [2] => 0987654321 [3] => 3210987654321 [4] => 1324354657 [5] => 1324354657689 ) [1] => Array ( [0] => [1] => 1234567890123 [2] => [3] => 3210987654321 [4] => [5] => 1324354657689 ) [2] => Array ( [0] => 1234567890 [1] => [2] => 0987654321 [3] => [4] => 1324354657 [5] => )) 这个正则表达式preg_match_all('/(\d{13})|(\d{10})/s', $s, $r);为什么不能这样写preg_match_all('/(\d{10})|(\d{13})/s', $s, $r);就是把10 和13 的位置换了下就不行了,为什么呢? \d{10}放到前面的话 会优先匹配10个连续数字,遇到13连续数字会匹配前10个,所以会出错,可以修改成如下preg_match_all('/(\d{10}\b)|(\d{13}\b)/s', $s, $r);print_r($r);加上\b指定边界 (\d{10}) 匹配10位数字。因为你每个td里面都>=10位 满足条件。因此在第一个子模式中就匹配到了。你可以用两个正则来形成两个数组就简单多了。 php 传值的问题 求高手 代码折叠与高亮 请问下PHP怎么样才可以确认是否支持filetype呢 新手图书馆系统,问个问题 在线等!!:-) 被引用的文件里不能使用父程序中的变量么? 使用MySQL+PHP朋友们的福音... 请问如何判密码是否为空? 用PHP发邮件(使用mail函数) PHP判断远程FTP文件是否存在 求关于php权限设置和管理的思路 怎么解决网页太大加载的问题,就像淘宝那样的效果
$s = <<< TXT
<td>1234567890</td>
<td>1234567890123</td>
<td>0987654321</td>
<td>3210987654321</td>
<td>1324354657</td>
<td>1324354657689</td>
TXT;
preg_match_all('/(\d{13})|(\d{10})/s', $s, $r);
print_r($r);
Array
(
[0] => Array
(
[0] => 1234567890
[1] => 1234567890123
[2] => 0987654321
[3] => 3210987654321
[4] => 1324354657
[5] => 1324354657689
) [1] => Array
(
[0] =>
[1] => 1234567890123
[2] =>
[3] => 3210987654321
[4] =>
[5] => 1324354657689
) [2] => Array
(
[0] => 1234567890
[1] =>
[2] => 0987654321
[3] =>
[4] => 1324354657
[5] =>
))
preg_match_all('/(\d{13})|(\d{10})/s', $s, $r);
为什么不能这样写
preg_match_all('/(\d{10})|(\d{13})/s', $s, $r);
就是把10 和13 的位置换了下就不行了,为什么呢?
preg_match_all('/(\d{10}\b)|(\d{13}\b)/s', $s, $r);
print_r($r);加上\b指定边界