+ -
当前位置:首页 → 问答吧 → 帮忙写一个正则?感激。。

帮忙写一个正则?感激。。

时间:2011-10-25

来源:互联网

string=qw_0_0-1额
preg_match("/\/(\w+)_(\d+)_(\d+)-([\w]+)\>/si",$str);

怎么我上面那个中文取不到值啊。只要出现中文就取值不到。。
和解?

作者: qhafeng   发布时间: 2011-10-25

[\w]+不能匹配中文

中文的匹配:
GBK编码的话是[\x80-\xff]
utf-8的编码:[\x{4e00}-\x{9fa5}]

或者你用.匹配所有字符,也可以匹配出中文。

作者: ohmygirl   发布时间: 2011-10-25

引用 1 楼 ohmygirl 的回复:

[\w]+不能匹配中文

中文的匹配:
GBK编码的话是[\x80-\xff]
utf-8的编码:[\x{4e00}-\x{9fa5}]

或者你用.匹配所有字符,也可以匹配出中文。

还是获取不到哦、、

string=qw_0_0-1额
preg_match("/\/(\w+)_(\d+)_(\d+)-([\x80-\xff]+)\>/si",$str)

是这样写吗?

作者: qhafeng   发布时间: 2011-10-25

字符串是怎么样的? 用.+试试。

作者: jordan102   发布时间: 2011-10-25

字符串$str是qw_0_0-1额

作者: qhafeng   发布时间: 2011-10-25

/\w+-.+/ 就可以匹配了。你的规则仅是如此?

作者: jordan102   发布时间: 2011-10-25

jordan说的对。你可以简单用\w匹配前面的数字字母下划线。如果要单独匹配出中文。也可以:
PHP code

<?php
$string = 'qw_0_0-1额你好';
preg_match_all("/(\w+-\d+(.*))/is",$string,$arr);
print_r($arr[1]);//匹配串
print_r($arr[2]);//中文放在这里

作者: ohmygirl   发布时间: 2011-10-25

我不会写正则。。
$str=qw_0_0-1额;
preg_match("/\/(\w+)_(\d+)_(\d+)-([\w]+)\>/si",$str);

我只是想把上面那个 “1额”给取出来。↑要怎么改

作者: qhafeng   发布时间: 2011-10-25

(preg_match("/\/(\w+)_(\d+)_(\d+)-(\w+-.+/)\>/si",$path_info,$arr_path))

作者: qhafeng   发布时间: 2011-10-25

$str="qw_0_0-1额>";
(preg_match("/\/(\w+)_(\d+)_(\d+)-(\w+-.+/)\>/si",$str,$arr_path))
我要分别取出
qw
0
0
1额

这四个,去掉后面那个“>”

作者: qhafeng   发布时间: 2011-10-25

PHP code
<?php
$string = 'qw_0_0-1额';
preg_match_all("/\w+-(\d+(.*))/is",$string,$arr);
print_r($arr[1]);//1额

作者: ohmygirl   发布时间: 2011-10-25

引用 9 楼 qhafeng 的回复:

$str="qw_0_0-1额>";
(preg_match("/\/(\w+)_(\d+)_(\d+)-(\w+-.+/)\>/si",$str,$arr_path))
我要分别取出
qw
0
0
1额

这四个,去掉后面那个“>”


用你的写法:
PHP code
<?php
$str = "qw_0_0-1额>";
$patten = '/(\w+)_(\w+)_(\w+)-(\d+[^<>]*)/is'; 
preg_match_all($patten,$str,$arr);
print_r($arr);

作者: ohmygirl   发布时间: 2011-10-25

PHP code
$str='qw_0_0-1额>';
#1
print_r(sscanf($str,'%[^_]_%d_%d-%[^>]>'));
echo "<br/>";
#2
preg_match('#([^_]+)_(\d+)_(\d+)-([^>]+)>#',$str,$m);
print_r($m);

作者: foolbirdflyfirst   发布时间: 2011-10-25

PHP code

$s ='qw_0_0-1额>';
$arr=split('[_-]',$s);
print_r($arr);  

作者: jordan102   发布时间: 2011-10-25

引用 13 楼 jordan102 的回复:

PHP code

$s ='qw_0_0-1额>';
$arr=split('[_-]',$s);
print_r($arr);


这个没有去掉>
应该加个>分割

PHP code
<?php
$s ='qw_0_0-1额>';
$arr=split('[>_-]',$s);
print_r($arr); 

作者: ohmygirl   发布时间: 2011-10-25

PHP code

<?php
$str = "qw_0_0-1额>";
$patten = '/(\w+)_(\w+)_(\w+)-(\d+[^<>]*)/is'; 
preg_match_all($patten,$str,$arr);
print_r($arr);



这个可以哦。。
如果我要过滤SQL语句做防注入呢?

作者: qhafeng   发布时间: 2011-10-25

相关阅读 更多