PHP大批量正则,php – 正则表达式匹配无限数量的选项

非正则表达式解决方案:)

$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, 0, $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)'));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值