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

qhafeng 2011-10-25 09:57:28
string=qw_0_0-1额
preg_match("/\/(\w+)_(\d+)_(\d+)-([\w]+)\>/si",$str);

怎么我上面那个中文取不到值啊。只要出现中文就取值不到。。
和解?
...全文
140 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
川流不息#31 2011-10-27
  • 打赏
  • 举报
回复
不错 学习了 !!!
qhafeng 2011-10-25
  • 打赏
  • 举报
回复

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


这个可以哦。。
如果我要过滤SQL语句做防注入呢?
ohmygirl 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jordan102 的回复:]

PHP code

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

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

<?php
$s ='qw_0_0-1额>';
$arr=split('[>_-]',$s);
print_r($arr);
一起混吧 2011-10-25
  • 打赏
  • 举报
回复

$s ='qw_0_0-1额>';
$arr=split('[_-]',$s);
print_r($arr);
foolbirdflyfirst 2011-10-25
  • 打赏
  • 举报
回复
$str='qw_0_0-1额>';
#1
print_r(sscanf($str,'%[^_]_%d_%d-%[^>]>'));
echo "<br/>";
#2
preg_match('#([^_]+)_(\d+)_(\d+)-([^>]+)>#',$str,$m);
print_r($m);
ohmygirl 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qhafeng 的回复:]

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

这四个,去掉后面那个“>”
[/Quote]

用你的写法:
<?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
$string = 'qw_0_0-1额';
preg_match_all("/\w+-(\d+(.*))/is",$string,$arr);
print_r($arr[1]);//1额
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
  • 打赏
  • 举报
回复
(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);

我只是想把上面那个 “1额”给取出来。↑要怎么改
ohmygirl 2011-10-25
  • 打赏
  • 举报
回复
jordan说的对。你可以简单用\w匹配前面的数字字母下划线。如果要单独匹配出中文。也可以:

<?php
$string = 'qw_0_0-1额你好';
preg_match_all("/(\w+-\d+(.*))/is",$string,$arr);
print_r($arr[1]);//匹配串
print_r($arr[2]);//中文放在这里
一起混吧 2011-10-25
  • 打赏
  • 举报
回复
/\w+-.+/ 就可以匹配了。你的规则仅是如此?
qhafeng 2011-10-25
  • 打赏
  • 举报
回复
字符串$str是qw_0_0-1额
一起混吧 2011-10-25
  • 打赏
  • 举报
回复
字符串是怎么样的? 用.+试试。
qhafeng 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ohmygirl 的回复:]

[\w]+不能匹配中文

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

或者你用.匹配所有字符,也可以匹配出中文。
[/Quote]
还是获取不到哦、、

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

是这样写吗?
ohmygirl 2011-10-25
  • 打赏
  • 举报
回复
[\w]+不能匹配中文

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

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

ohmygirl 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 qhafeng 的回复:]

PHP code

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



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

sql的话,应该检查用户的输入是否有select,drop,delete,alter...等关键字。

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧