正则表达式 PHP

来源:百度知道 编辑:UC知道 时间:2024/05/17 23:35:13
有个关于反向引用的问题,以下用PHP描述:

$str="5aaaaa";
//一个名为str的字符串,里面由5和5个a组成

很明显有很多表达式匹配它,比如:
preg_match("/\d\w{5}/",$str,$phones);

然后我想获取前面的整数,比如:
preg_match("/(\d)\w{5}/",$str,$phones);
这样$phones[1]就是里面的整数

接下来,我想反向引用,在PHP中使用\1来内部嵌入捕获内容,比如:
preg_match("/(\d)(\w)\2/",$str,$phones);
这样也可以匹配$str,因为\w匹配了a,而\2代表a

问题是,我想在{}中嵌入刚刚捕获的数字,比如:
preg_match("/(\d)\w{\1}/",$str,$phones);
但这个表达式无法匹配到指定的值,我的本意是想匹配:
preg_match("/(\d)\w{5}/",$str,$phones);

请问我应该如何改preg_match("/(\d)\w{\1}/",$str,$phones);,以使它能够匹配"6cccccc""7ddddddd"等等,谢谢。
To 回答者:无缘☆与酒 - 经理 四级 1-11 17:25:

本来我也是这样想的,但发现有很多数据根本没法准确捕获,因为没法在一条式子里确定要获取的字数。所以用函数的方法是不行的,只能在一个式子里完成。

To 回答者:fennng - 参将 八级 1-12 15:26
回答者:liuxinling_06 - 魔法师 五级 1-12 16:15

同意liuxinling_06的思路,不过对他提供的正则做一点小小的改动,就更符合楼主的要求了。

'/^(\d)([a-z])\2*$/i'

这样就只能匹配“以一个数字起始,后跟一串字母,这些字母是完全相同的”这样的字符串。

然后再用liuxinling_06提供的if语句进行检测。

那你倒是说清楚"杂乱无章"到底允许哪些字符啊. 如果只是允许数字和字母, 正则稍微改一下就可以了. 其实大家都把思路跟你讲得很清楚了, 你完全根据可以自己的需要发挥, 除非你一点都不了解正则表达式.
/^(\d)([a-z])*$/i
另外再告诉你, 你想仅靠正则表达式完成你所说的功能是行不通的.

写一个正则表达式的函数

然后就调用他 把你的变量引入函数

以后只要改函数 后台的代码一点都不用改

我认为蛮好用 你试试!!

嘿嘿~~~

{}中不能使用反向引用,至少不能直接使用,有没有其他使用方法不祥(可能性比较小)

建议解决方式:

使用如下正则以及判断
$str="5aaaaa";
$ret=preg_match("/^(\d)(\w)\\2*$/",$str,$phones);
if($ret==1)
{
if($phones[1]==strlen($phones[0])-1)
{
echo('true');
}
else
{
echo('false1');
}
}
else
{
echo('false2');
}
说明:
先用正则表达式/^(\d)(\w)