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 – 正则表达式匹配无限数量的选项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 逆向-扫雷算法分析
- 下一篇: 超级爆笑学生作文大全