php正则 php用正则截取字符串串长度

php正则匹配之后的字符串长度问题,求高手帮助
17:34:30 +08:00 · 2687 次点击
有一个html中包含很多个这样的:&i class="piaoshu"&323&/i&我要把323这样的数字获取到,我是这样写的:preg_match_all('/&i class="piaoshu"&.*([\d\.]+?).*&\/i&/sU', $data, $matchnum);然后我想把获取到的数据按大小排序,但是发现排序结果是错误的,百思不得其解,后来用var_dump了一下 $matchnum,发现了问题:array(12) { [0]=& string(26) "323" [1]=& string(26) "120" [2]=& string(25) "83" [3]=& string(26) "244" [4]=& string(26) "149" [5]=& string(25) "84" [6]=& string(26) "101" [7]=& string(25) "47" [8]=& string(25) "67" [9]=& string(25) "83" [10]=& string(26) "351" [11]=& string(26) "222" } 比如第一个323应该长度是3啊,怎么成26了?仔细算算,发现是长度和&i class="piaoshu"&323&/i&刚好一样?这是怎么回事?我要如何修改,能够正常用sort排序?
10 回复 &| &直到
08:00:00 +08:00
& & 17:56:56 +08:00
1 发个 gist 嘛
2 html 的话,不能换左用 dom 的方式操作嘛
3 没明白正则跟排序有啥关系
& & 18:05:33 +08:00 via Android
正则式
/&i class=&piaoshu&&(\d+)&\/i&/
你那个我实在理解不能。
& & 18:11:01 +08:00
preg_match_all('/&i class=&piaoshu&&\s*?([\d\.]+?)\s*?&\/i&/si', $data, $matchnum);
& & 18:12:52 +08:00
@ 发现问题了,正则式写错了,我只要像323这样的数字,但是实际标签也匹配出来了,刚好在浏览器中要不显示出标签。
我只有匹配出数字,怎样写
正则实在学不会
& & 18:22:24 +08:00
@ 发现问题了,这样的结果是&i class=&piaoshu&&323&/i&,刚好浏览器里只显示323,标签没显示出来
但是我只要323,怎样写?
& & 18:39:38 +08:00
好吧,我知道原因了。$matchnum[0]和$matchnum[1]是不一样的,我应该用1.
& & 18:52:13 +08:00
@ 对的,0是原字符串,1才是第一个括号匹配位置
& & 18:57:17 +08:00
恭喜你,答对了
& & 19:18:22 +08:00
@ 0是匹配到的完整字符串。
& & 13:09:47 +08:00
呵呵~成问答帖了
& · & 1225 人在线 & 最高记录 3541 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.0 · 60ms · UTC 00:16 · PVG 08:16 · LAX 17:16 · JFK 20:16? Do have faith in what you're doing.正文 preg_match正则匹配字符串长度问题分析
preg_match正则匹配字符串长度问题分析
发布时间: & 编辑:www.jquerycn.cn
介绍下php编程中使用preg_match正则匹配字符串长度的问题,有需要的朋友参考下,希望对大家有所帮助。
ini_set(&pcre.backtrack_limit&, );
注意:此参数在php 5.2.0版本之后可用。
关于:pcre.recursion_limit
pcre.recursion_limit是pcre的递归限制,这个项如果设很大的值,会消耗所有进程的可用堆栈,最后导致php崩溃。
也可以通过修改配置来限制:
复制代码 代码示例:
ini_set(&pcre.recursion_limit&, 99999);
最好对内存进行限定设置:
复制代码 代码示例:
ini_set(&memory_limit&, &64m&); 。您可能感兴趣的文章:温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(7282)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'php 正则提取数字',
blogAbstract:'&?php//$patterns = \"/^(http|https):\\/\\/(.)*\\.(.)*$/\";$patterns = \"/\\d+/\";$strs=\"23345swwyuiopbfASWEDD4667\";preg_match_all($patterns,$strs,$arr);print_r($arr);?&
Array(&&& [0] =& Array&&&&&&& (&&&&&&&&&&& [0] =& 23345&&&&&&&&&&& [1] =& 4667&&&&&&& )
&?php//$patterns = \"/^(http|https):\\/\\/(.)*\\.(.)*$/\";',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:9,
publishTime:6,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}PHP正则匹配指定长度字符必须有数字、字母、下划线
作者:用户
本文讲的是PHP正则匹配指定长度字符必须有数字、字母、下划线,
任意的字符6到16位是.{6,16}
只有 数字、字母、下划线组成 就是[0-9_a-zA-Z]
总的加在一起就椒 ^[_0-9a-z]{6,16}$
任意的字符6到16位是.{6,16}
只有 数字、字母、下划线组成 就是[0-9_a-zA-Z]
总的加在一起就椒 ^[_0-9a-z]{6,16}$
function ispassword($str) {
if (preg_match('/^[_0-9a-z]{6,16}$/i',$str)){
$password = 'abcde@';
if(ispassword($password)) {
echo '符合';
echo '不符合';
echo '&br&';
$password = 'abcdeasdas_1324';
if(ispassword($password)) {
echo '符合';
echo '不符合';
$action = trim($_get['action']);
if($action == "sub")
$str = $_post['dir'];
//if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."a-za-z0-9_]+$/",$str)) //gb2312汉字字母数字下划线正则表达式
if(!preg_match("/^[x{4e00}-x{9fa5}a-za-z0-9_]+$/u",$str))
//utf-8汉字字母数字下划线正则表达式
echo "&font color=red&您输入的[".$str."]含有违法字符&/font&";
echo "&font color=green&您输入的[".$str."]完全合法,通过!&/font&";
&form method="post" action=""&
输入字符(数字,字母,汉字,下划线):
&input type="text" name="dir" value=""&
&input type="submit" value="提交"&
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索正则表达式
正则匹配字符串长度、正则匹配字符长度、正则表达式匹配下划线、正则匹配下划线、正则匹配任意字符,以便于您获取更多的相关知识。
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
40+云计算产品,6个月免费体验
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
IT采购开年惠,百款产品5折起,新购满额再返最高6000!
云栖社区(yq.aliyun.com)为您免费提供相关信息,包括
,所有相关内容均不代表云栖社区的意见!51CTO旗下网站
探讨PHP函数split()如何使用正则表达式切割字符串
PHP函数split()的基本语法为:array split ( string $pattern, string $string [, int $limit] )。我们向大家举了两个例子来具体讲解这个函数的使用方法。
作者:佚名来源:电脑学习网| 09:05
对于初学者来说,掌握PHP中常用函数的用法,是其继续学习的基础。今天我们就为大家详细介绍有关函数split()的一些使用方法,希望大家能通过这篇文章介绍的内容增加自己的知识库。
array split ( string $pattern, string $string [, int $limit] )
preg_split() 函数使用了 Perl 兼容正则表达式语法,通常是比PHP函数split()更快的替代方案。如果不需要正则表达式的威力,则使用 explode() 更快,这样就不会招致正则表达式引擎的浪费。
本函数返回一个字符串数组,每个单元为 string 经区分大小写的正则表达式 pattern 作为边界分割出的子串。如果设定了 limit,则返回的数组最多包含 limit 个单元,而其中最后一个单元包含了 string 中剩余的所有部分。如果出错,则 split() 返回 FALSE。
将 /etc/passwd 中的前四个字段分割出来:
例 1839. PHP函数split()例子
&list($user,&$pass,&$uid,&$gid,&$extra)&= &split&(&:&,&$passwd_line,&5); &&
如果字符串中有 n 个与 pattern 匹配的项目,则返回的数组将包含 n+1 个单元。例如,如果没有找到 pattern,则会返回一个只有一个单元的数组。当然,如果 string 为空也是这样。
解析可能用斜线,点,或横线分割的日期:
例 1840. PHP函数split()例子
&//&分隔符可以是斜线,点,或横线 &$date&=&&04/30/1973&; &list($month,&$day,&$year)&=&split&('[/.-]',&$date); &echo&&Month:&$&Day:&$&Year:&$year&\n&; &&
想仿效 Perl 中类似的 @chars = split('', $str) 行为,请参考 preg_split() 或 str_split() 函数中的例子。
注意 pattern 是一个正则表达式。如果想要用的分割字符是正则表达式中的特殊字符,要先将其转义。如果觉得PHP函数split()(或其它任何 regex 函数)行为古怪的话,请阅读包含在 PHP 发行包中 regex/ 子目录下的 regex.7 文件。该文件是手册页面格式,可以用类似 man /usr/local/src/regex/regex.7 的命令来阅读
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
热点热点头条关注头条
24H热文一周话题本月最赞
讲师:271537人学习过
讲师:146174人学习过
讲师:228479人学习过
精选博文论坛热帖下载排行
本书是一本以示例形式直接面向应用的网络管理图书。书中以大量示例和大量实用网络管理与故障排除经验介绍了当前网络管理工作的各主要方面。...
订阅51CTO邮刊

我要回帖

更多关于 php 按长度截取字符串 的文章

 

随机推荐