免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3800 | 回复: 10
打印 上一主题 下一主题

[正则表达式] 正则表达式问题:\\1吃数字怎么办? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-14 07:00 |只看该作者 |倒序浏览
我用php designer测试用的代码:
$t="121-43,21-35,321-98"; //找到-号前面的数字21,就把-后面的换成新数字88
echo preg_replace("/(^|,)21-([0-9]+?)($|,)/","\\121-88\\3",$t);

结果出来121-431-88,321-98
\\1本来是逗号...逗号没了,它后面的一个数字也没了....换字母正常

请大牛指点一下,谢谢!

[ 本帖最后由 HonestQiao 于 2005-11-14 10:43 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2005-11-14 09:15 |只看该作者
E:_Downloads>more test.pl
$t='121-43,21-35,321-98';
$t =~ s/(,21-)d+(,)/${1}88${2}/;
print $t,"n";

E:_Downloads>perl test.pl
121-43,21-88,321-98

这是perl的


echo preg_replace("/(,21-)d+(,)/","\{1}88\{2}",$t);

这是php,没有测试过

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2005-11-14 09:21 |只看该作者
echo preg_replace("/(^|,)21-([0-9]+?)($|,)/","\${1}21-88\\3",$t);
试试.

[ 本帖最后由 tonera 于 2005-11-14 09:25 编辑 ]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
4 [报告]
发表于 2005-11-14 11:19 |只看该作者
PCRE里面写的很清楚,优先匹配,然后是普通的数字。

建议的方法是:
  1. group:  (?P<myGroup>原有匹配内容)
  2. backreference : g<myGroup>
复制代码

论坛徽章:
0
5 [报告]
发表于 2005-11-14 17:55 |只看该作者
谢谢大家了! 发现了一个办法
把将来被吃掉的数字用括号保护起来,后面的序号顺延
echo preg_replace("/(^|,)(21)-([0-9]+?)($|,)/","\\1\\2-88\\4",$t);

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
6 [报告]
发表于 2005-11-14 21:23 |只看该作者
原帖由 shrui 于 2005-11-14 17:55 发表
谢谢大家了! 发现了一个办法
把将来被吃掉的数字用括号保护起来,后面的序号顺延
echo preg_replace("/(^|,)(21)-([0-9]+?)($|,)/","\1\2-88\4",$t);



如果仅仅为了保护数字而使用括号的话,那么请使用(?:原有匹配内容)

这样子,它就不会产生引用,原有的匹配序列也不用调整了。

论坛徽章:
0
7 [报告]
发表于 2005-11-14 23:49 |只看该作者
谢谢!
不过我又有了个问题, 不知道能不能用正则表达式解决:
$t="323-1224,64-5678,89-9087";//跟在索引值后面的数字长度是一样的
想去掉数字小于5000的.....

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
8 [报告]
发表于 2005-11-15 09:24 |只看该作者
原帖由 shrui 于 2005-11-14 23:49 发表
谢谢!
不过我又有了个问题, 不知道能不能用正则表达式解决:
$t="323-1224,64-5678,89-9087";//跟在索引值后面的数字长度是一样的
想去掉数字小于5000的.....



希望可以举一个完整的操作例子,我好给你做正则。

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
9 [报告]
发表于 2005-11-15 09:28 |只看该作者

  1. $strSource="323-1224,64-5678,89-9087";
  2. $strResult = preg_replace('/(\d+-[0-4]\d{3},*)|(,*\d+-[0-4]\d{3})/i', '', $strSource);
复制代码

论坛徽章:
0
10 [报告]
发表于 2005-11-15 10:47 |只看该作者
谢谢乔兄了!
不过发现我简化问题的时候,出问题了, 其实是....
$t="323-1224,64-5678,89-9087";//跟在索引后面的数值是1000~9999
代码生成一个1000~9999值, 想去掉数值小于这个值的[索引-数值]组

[ 本帖最后由 shrui 于 2005-11-15 10:51 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP