php 匹配多个正则表达式,php – 正则表达式匹配无限数量的选项
搜索热词
我希望能够像这样解析文件路径:
/var/www/index.(htm|html|PHP|shtml)
进入有序数组:
array("htm","html","PHP","shtml")
然后生成一个备选列表:
/var/www/index.htm
/var/www/index.html
/var/www/index.PHP
/var/www/index.shtml
现在,我有一个preg_match语句可以拆分两个选项:
preg_match_all ("/\(([^)]*)\|([^)]*)\)/",$path_resource,$matches);
有人可以给我一个指针,如何扩展它以接受无限数量的替代品(至少两个)?关于正则表达式,其余的我可以处理.
规则是:
>列表需要以a开头(并以a结尾)
>必须有一个|在清单中(即至少两个备选方案)
>(或)的任何其他事件将保持不变.
更新:我需要能够处理多个括号对,例如:
/var/(www|www2)/index.(htm|html|PHP|shtml)
对不起,我没有马上说出来.
Update 2: If you’re looking to do what I’m trying to do in the filesystem,then note that glob() already brings this functionality out of the Box. There is no need to implement a custom solutiom. See @Gordon’s answer below for details.
非正则表达式解决方案:)
$test = '/var/www/index.(htm|html|PHP|shtml)';
/**
*
* @param string $str "/var/www/index.(htm|html|PHP|shtml)"
* @return array "/var/www/index.htm","/var/www/index.PHP",etc
*/
function expand_bracket_pair($str)
{
// Only get the very last "(" and ignore all others.
$bracketStartPos = strrpos($str,'(');
$bracketEndPos = strrpos($str,')');
// Split on ",".
$exts = substr($str,$bracketStartPos,$bracketEndPos - $bracketStartPos);
$exts = trim($exts,'()|');
$exts = explode('|',$exts);
// List all possible file names.
$names = array();
$prefix = substr($str,$bracketStartPos);
$affix = substr($str,$bracketEndPos + 1);
foreach ($exts as $ext)
{
$names[] = "{$prefix}{$ext}{$affix}";
}
return $names;
}
function expand_filenames($input)
{
$nbBrackets = substr_count($input,'(');
// Start with the last pair.
$sets = expand_bracket_pair($input);
// Now work backwards and recurse for each generated filename set.
for ($i = 0; $i < $nbBrackets; $i++)
{
foreach ($sets as $k => $set)
{
$sets = array_merge(
$sets,expand_bracket_pair($set)
);
}
}
// Clean up.
foreach ($sets as $k => $set)
{
if (false !== strpos($set,'('))
{
unset($sets[$k]);
}
}
$sets = array_unique($sets);
sort($sets);
return $sets;
}
var_dump(expand_filenames('/(a|b)/var/(www|www2)/index.(htm|html|PHP|shtml)'));
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
php 匹配多个正则表达式,php – 正则表达式匹配无限数量的选项相关推荐
- PHP大批量正则,php – 正则表达式匹配无限数量的选项
非正则表达式解决方案:) $test = '/var/www/index.(htm|html|php|shtml)'; /** * * @param string $str "/var/ww ...
- php正则匹配js中变量_PHP正则表达式核心技术 第4节 php查找匹配函数使用心得
作者:极客小俊 一个专注于web技术的80后 你不用拼过聪明人,你只需要拼过那些懒人 你就一定会超越大部分人! php中兼容Perl的正则表达式处理函数 在我们说php系统自带的正则处理函数之前,我们 ...
- C#正则表达式的完全匹配、部分匹配及忽略大小写的问题
原文:C#正则表达式的完全匹配.部分匹配及忽略大小写的问题 问题的提出 根据用户给定表达式,里面含有各种数学函数,如求绝对值,三角函数,平方.开方等,分别以类似ABS(表达式),Sin(表达式),AS ...
- [置顶] 正则表达式应用:匹配IP地址
都知道iP地址有四个数值,三个点号组成.三个数值的具体范围为0到255,为了使用正则表达式匹配就必须分析IP地址的组成 1先分析数值,2再组合数值和点号 1先分析数值 IP地址的数字范围从0到255, ...
- js 正则表达式奇偶字符串替换_Python中的正则表达式及其常用匹配函数用法简介...
今 日 鸡 汤 此曲只应天上有,人间难得几回闻. /1 前言/ 这次给大家主要是介绍Python中的正则表达式,及其相关函数的基本使用方法,并且捎带一些正则表达式给我们带来的便利. /2 简介/ Py ...
- 正则表达式匹配不包含特定字符串解决匹配溢出问题
匹配溢出问题在正则表达式当中算是比较常见的问题,它常常导致我们匹配结果莫名其妙的出错,本文专门为你讲解如何通过匹配不包含特定字符串的方法来解决这类问题. 那么,什么是匹配溢出呢? 下面我们来看个例子: ...
- 一组匹配中国大陆手机号码的正则表达式
一组匹配中国大陆手机号码的正则表达式. 正则表达式 ([PCRE]) 如果你需要 POSIX 标准的正则表达式,点击这里 匹配所有号码(手机卡 + 数据卡 + 上网卡) [^(?:\+?86)?1(? ...
- 困难动态规划系列、经典的正则表达式和通配符匹配问题(难题)
2020/10/24. 周六.今天又是奋斗的一天. 正则表达式(Regular Expression, RE)就是一组定义某种搜索模式(pattern)的字符. 文章目录 Leetcode 10 正则 ...
- Jmeter当获取正则表达式匹配数字为负数时获取所有匹配的值
需求说明:如果http的bodyData中有类似于{"idList":["6505","6506","2222".... ...
最新文章
- python 调用sqldr_sqlldr并发
- 020_html格式化
- 深度学习核心技术精讲100篇(二十三)-深度学习系列计算广告与推荐系统有哪些区别?使用的主流模型有哪些?
- Oracle编程入门经典 第8章 索引
- java 内存屏障类型_Java内存模型精讲
- Android: 解决动画完成后位置恢复到初始位置的问题
- 简单的php,php简单语句
- Beauty Of Unimodal Sequence(HDU-6592)
- putty mtputty 设置utf8编码
- linux rz上传文件及出错解决方案
- linux查看网口位置命令,Linux下查看网卡信息及确定网卡位置
- 浙大计算机海归教授,科学网—人才引进的“拿来主义”——我看浙江大学海外招聘 - 周波的博文...
- 计算机故障诊断知识,故障诊断
- eclipse打不开,提示出现“eclipse发生了错误,请参阅日志文件”
- 流上机器学习,星环科技Sophon Base助力海洋石油富岛工艺监测智能化
- 第十九章 Caché 函数大全 $INCREMENT 函数
- informatica关于计划任务的表说明
- 反映个把月才退了个零头 ——消费者投诉旅游平台退款难
- 关于ping本地公网IP不通。。
- 破解企业数字化增长困境的四大利刃