Php正则表达式匹配需要注意的问题

一个返回ip地址的get,在页面上的数据如下


我想得到lo的值和lc的值,用PHPzheng标示为:/.*lo="(.*)",.*/;然后获取$1的值就可以了,不过在测试的过程中老是不能出现正确的lo,我就不得不输出获得的这个值来看,结果一看,竟然是乱码,然后我又用语句:

iconv('GB2312','UTF-8',$string);

把编码转换成和页面和数据库一致的编码方式UTF8,然后再输出的时候显示正确,解决了乱码的问题。但是在用正则匹配的时候还是不行,真是遇了个闷。

然后我突然灵机一动!会不会因为返回值中含有换行符!然后我看了一下源代码:


果不其然,返回的页面中含有换行符。如果用js获取直接使用eval就行了,但是这个php啊,有时候处理数据起来还真得在正则表达式上下一番功夫。那么发现了问题的根源,现在就着手解决问题。

后面加上[\s\S]进行包括换行符在内的任意字符的匹配。正则变为:

/.*lo="(.*)",[\s\S]/;

Yes,匹配成功!

总结:

1.get数据源的时候看看源代码是否有换行符

2.中文乱码时,一定要把编码方式通过iconv改成一致!

3..*通常情况下匹配的时候不含有换行符的任意字符。[\s\S]*则匹配的时候包括换行符的任意字符!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值