php - 匹配无限数量选项的正则表达式

标签 php regex preg-match

我希望能够像这样解析文件路径:

 /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);

有人能告诉我如何扩展它以接受无限数量的备选方案(至少两个)吗?只是关于正则表达式,其余的我可以处理。

规则是:

  • 列表需要以 ( 开始,以 ) 结束

  • 列表中必须有一个|(即至少有两个选择)

  • () 的任何其他出现都将保持不变。

更新:我还需要能够处理多个括号对,例如:

 /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.

最佳答案

我认为您正在寻找:

/(([^|]+)(|([^|]+))+)/

基本上,将分隔符“|”成重复模式。

此外,根据您的第三个要求,您的话应该由“not pipes”而不是“not parens”组成。

此外,对于此问题,更喜欢 + 而不是 *+ 表示“至少一个”。 * 表示“零个或多个”。

关于php - 匹配无限数量选项的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2534455/

相关文章:

php - 没有结束分隔符 '/' 发现错误

php - 动态更新数据库列

php - 如何缓存远程网页资源实现网页超速?

php - Twitter 用户名的正则表达式不起作用

php - 正则表达式用于匹配除空白之外的任何字符

php正则表达式至少匹配3个字符?

PHP - 上传到服务器时获取apk包名称

php - Mysqli_query 结果到变量 PHP

regex - sed:用 Camel:Case 替换 CamelCase

JavaScript/jQuery 正则表达式用有效字符替换输入字段