php正则表达式 n,CFC4N小试php正则表达式
朋友甲:要求根据一串字符串,反转成PHP数组,其给出的字符串为php的print_r打印出来的。我们在暂不考虑此方法是否能确保数据的准确性,以及其他意外等情况,仅根据要求写正则。
其字符串为
Array
(
[tt] => Array
(
[table] => qqttcode
[hitcode] => 1
)
[ww] => Array
(
[table] => qqwwcode
[hitcode] =>
)
[pp] => Array
(
[table] => qqppcode
[hitcode] => Array
(
[table] => qqppcode
[hitcode] =>
)
)
)
CFC4N给出一下结果:
$strRge1 = '/(\[([^]]+)]\s?=>\s?)?Array[\s\S]+?\(([^()]|(?R))*\)/i';
$arrReturn = array();
if (preg_match_all($strRge1,$str,$tt1))
{
$arrReturn = getarray($tt1[0][0]);
}
$arrReturn2 = array();
foreach ($arrReturn as $k => $v)
{
$arrReturn2[$k] = $v[$k];
}
print_r($arrReturn2);
function getarray ($strContents)
{
$arrTemp = array();
$strRge = '/\[([^]]+)]\s?=>\s?Array[\s\S]+?\(([^()]|(?R))*\)/i';
$strReg2 = '/\[([^]]+?)]\s?=>\s?([\d\w]+)?/';
if (preg_match_all($strRge,$strContents,$strTemp))
{
$num = count($strTemp[1]);
if ($num > '1')
{
for ($i=0; $i
{
if (preg_match_all($strRge,$strTemp[0][$i],$arrTTT))
{
$arrTemp[$strTemp[1][$i]] = array();
$arrTemp[$strTemp[1][$i]] = getarray($strTemp[0][$i]);
}
else
{
$arrTemp[$strTemp[1][$i]] = $strTemp[0][$i];
}
}
}
else
{
$arrTemp[$strTemp[1][0]] = array();
$arrTemp2 = array();
if (preg_match_all($strReg2, $strTemp[0][0],$straa))
{
$num = count($straa[0]);
for ($i=0; $i
{
$arrTemp2[$straa[1][$i+1]] = $straa[2][$i+1];
}
}
$arrTemp[$strTemp[1][0]] = $arrTemp2;
}
}
return $arrTemp;
}
结果是可以用的。但是发现其只能用于固定的三层嵌套,假如N层的话,无法用这个函数了,后来,我又改造一下那个正则,改为
$strRge1 = '/\[(([^]]+)]\s?=>\s?Array[\s]+?\(([^()])+|(?R))\)+/i';
但是,并不能解决问题。。各位看官,您认为,我的误区在哪里呢?
附 第一个正则截图
更改后正则匹配截图
朋友乙:要求批量给html字符串中a标签中不包含title属性的标签添加title,而且,其title内容为到之间的文本。。
CFC4N给出答案为:
$str = 'ssssssssssssssssssssssssssss';
$str = preg_replace('%(?:(?)[\s\S])+?%im','\\2',$str);
print_r($str);
$str = 'ssssssssssssssssssssssssssss';
$str = preg_replace('%(?:(?)[\s\S])+?%im','\\2',$str);
print_r($str);
各位看官,您认为,CFC4N写的正则表达式里,哪些还可以优化呢?这个效率是不是不高??
朋友丙:要求过滤非本域名,或者非本子域名的其他域名的UBB标签链接,一旦包含,直接替换成其中间的文本,比如例子字符串如下
[url=http://www.sadas.cn]baidu[/url]
[url=www.ggasdwe.com]百度[/url]
[url=http://www.qq.com/index.php]QQ[/url]
[url=http://www.miyifun.com/index.html]其他
[/url]
[url=pc.qq.com/index.php]PC QQ[/url]
其中,字符串中不确定有几个换行等其他字符,而且,不确定url的UBB标签中的网址中是否包含http://,不确定二级域名或者三级域名
CFC4N给出的正则以及PHP代码如下
$str = '[url=http://www.sadas.cn]baidu[/url]
[url=www.ggasdwe.com]百度[/url]
[url=http://www.qq.com/index.php]QQ[/url]
[url=http://www.miyifun.com/index.html]其他
[/url]
[url=pc.qq.com/index.php]PC QQ[/url]';
print_r(preg_replace('%\[url=(http://)?(?:(?!qq\.com)[^\]])*\][\r|\r\n]*([\s\S]+?)[\r|\r\n]*\[/url\]%i','\\2',$str));
各位看官,您认为这里哪里是多余的?还可以进行哪些正则的优化来提高效率?如果没看懂,那您的疑问在哪里?
朋友丁:要求读取squid的配置文件中,起作用的行,也就是没有#开头进行注释的行。
其中,squid的配置文件内字符串见附件中
squid的配置文件内容
CFC4N给出正则代码如下
preg_match_all('/^(?!#).+?$/m', file_get_contents('squid.conf'), $regs);
print_r($regs[0]);
运行截图
看官们,您认为,这个正则还有哪些没注意到的点?能否正确无误的匹配到朋友丁所需要的内容?您有疑问吗?
PS:以上正则,均为PCRE引擎。。其中,PHP代码的正则递归(迭代)部分,仅限于支持递归正则的引擎代码适用。。
感谢rex老大指点关于(?!)零宽断言非匹配的特性后接匹配规则可能无效的问题。
php正则表达式 n,CFC4N小试php正则表达式相关推荐
- java正则表达式及api_JAVA常用API:正则表达式regular expression
一.正则表达式的概念 正则表达式,regular expression,在代码中通常简写成regex 正则表达式是一个字符串,使用每单个字符串来描述.定义匹配规则,匹配一系列符合某个语法规则的字符串. ...
- python正则表达式入门_Python中的正则表达式教程
本文http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 正则表达式经常被用到,而自己总是记不全,转载一份完整的以备不时之需. 1. ...
- mysql触发器可以使用正则表达式_SQL 正则表达式及mybatis中使用正则表达式
这篇文章主要介绍了SQL 正则表达式及mybatis中使用正则表达式的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 mysql 提供的模式匹配的其他类型是使用扩展正则表达式. 当你对这 ...
- java生日正则表达式_Java编程基础15——正则表达式常用工具类
1_正则表达式的概述和简单使用 A:正则表达式 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.其实就是一种规则.有自己特殊的应用. 作用:比如注册邮箱,邮箱有用户名和密码,一般会 ...
- 正则表达式发明者_浅谈正则表达式背后的基本原理
一.写在前面 搞编程的都知道正则表达式是什么东西,这里就不多啰嗦了,需要强调的是,这篇文章并不是教你怎么去使用用正则表达式,正则表达式的语法并不是本文的重点,这篇文章的目的就是剥开正则表达式的语法糖, ...
- python perl正则表达式_python学习笔记(正则表达式)
什么是正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配.最简单的正则表达式就是普通字符串,可以匹配其自身.换包话说,正则表达式'python' 可以匹配字符 ...
- 正则表达式入门教程经典Javascript正则表达式(share)
前言 例子: ^.+@.+\\..+$ 这样的代码曾经多次把我自己给吓退过.可能很多人也是被这样的代码给吓跑的吧.继续阅读本文将让你也可以自由应用这样的代码. 正文 教程:正则表达式30分钟入门教程 ...
- php 正则表达式 文档,php的正则表达式完全手册
php的正则表达式完全手册 更新时间:2011年02月06日 17:12:49 作者: 正则表达式是烦琐的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感.只要认真去阅读这 ...
- java 正则表达式 table_JavaEdge/Java/Java中正则表达式.md at master · VegTableBird/JavaEdge · GitHub...
主要用到的是这两个类 - java.util.regex.Pattern - java.util.regex.Matcher. Pattern对应正则表达式,一个Pattern与一个String对象关 ...
最新文章
- OpenCV下利用傅里叶变换和逆变换实现图像卷积算法,并附自己对于卷积核/模板核算子的理解
- Docker在Linux上运行NetCore系列(一)配置运行DotNetCore控制台
- 怎么让html 整体加大,让一个Html元素撑满整个屏幕可以这样玩
- 《敏捷软件开发》读书笔记 (3)--敏捷语录
- python深度学习第二讲——用python写深度学习损失函数
- 放弃月薪过万的城市工作,返乡创业做农业,面对未知风险,你敢尝试吗?
- Storm之——实现井字棋游戏(人工智能)
- 电信光猫超级密码破解
- 一种表格数据比对的方法
- luogu P2440 木材加工
- uni-app保存图片到本地相册
- range 小程序picker_微信小程序picker滚动选择器使用详解
- MATLAB 学习笔记(2)MATLAB 矩阵的加减乘除运算
- 负数在计算机中的存储方式
- Excel 数字转日期类型
- PC:各大主板开机启动项快捷键
- 计算机培训感想幼儿园,幼儿园指南培训心得感想
- 游戏建模必备技巧一人物模型贴图布线!(99%小白收藏)
- FPGA中模为60的BCD码加法计数器
- 淘宝开放平台 top 的概要
热门文章
- 谷歌聊天机器人api_如何编写针对Google地图等网络应用量身定制的聊天机器人
- macos 安装scala_如何在MacOS上安装Scala和Apache Spark
- matlab的m函数入门1
- Python | 常见的反爬及解决方法,值得收藏
- 一文搞懂Python知识难点------装饰器
- Python 3.8 已发布,现在是切换至新版本的好时机吗?
- Apache Flink新场景——OLAP引擎
- Auto Encoder再学习
- python 获取键盘输入、同时有超时的功能_python 获取键盘输入,同时有超时的功能示例...
- jar java classpath_Java ClassLoader和ClassPath