国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Regex > 正文

CFC4N小試php正則表達式

2020-03-16 21:11:43
字體:
來源:轉載
供稿:網友
要求根據一串字符串,反轉成PHP數組,其給出的字符串為php的print_r打印出來的。
 
 
朋友甲:要求根據一串字符串,反轉成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<$num; $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<$num-1; $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'; 

但是,并不能解決問題。。各位看官,您認為,我的誤區在哪里呢? 
附 第一個正則截圖 
CFC4N小試php正則表達式
更改后正則匹配截圖 
CFC4N小試php正則表達式
朋友乙:要求批量給html字符串中a標簽中不包含title屬性的標簽添加title,而且,其title內容為<a href…>到</a>之間的文本。。 
CFC4N給出答案為: 
復制代碼代碼如下:

$str = '<a >ssss</a><a href="ss" >ssss</a><a style="border-left-color: rgb(0, 153, 204); border-left-width: 1px; border-left-style: solid; padding: 0px 3px; margin: 3px auto 0px; width: 640px; background-color: rgb(242, 246, 251); clear: both; border-top-color: rgb(0, 153, 204); border-top-width: 1px; border-top-style: solid; border-right-color: rgb(0, 153, 204); border-right-width: 1px; border-right-style: solid;"> 復制代碼代碼如下:

$str = '<a >ssss</a><a href="ss" >ssss</a><a style="border-left-color: rgb(0, 153, 204); border-left-width: 1px; border-left-style: solid; padding: 0px 3px; margin: 3px auto 0px; width: 640px; background-color: rgb(242, 246, 251); clear: both; border-top-color: rgb(0, 153, 204); border-top-width: 1px; border-top-style: solid; border-right-color: rgb(0, 153, 204); border-right-width: 1px; border-right-style: solid;"> 復制代碼代碼如下:

[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]); 

運行截圖 
CFC4N小試php正則表達式
看官們,您認為,這個正則還有哪些沒注意到的點?能否正確無誤的匹配到朋友丁所需要的內容?您有疑問嗎?

 

PS:以上正則,均為PCRE引擎。。其中,PHP代碼的正則遞歸(迭代)部分,僅限于支持遞歸正則的引擎代碼適用。。
感謝rex老大指點關于(?!)零寬斷言非匹配的特性后接匹配規則可能無效的問題。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 瓦房店市| 新乐市| 七台河市| 安义县| 宣威市| 瑞昌市| 武陟县| 无为县| 来宾市| 育儿| 柯坪县| 蕲春县| 荆州市| 三亚市| 衡山县| 房山区| 乐都县| 钟祥市| 抚宁县| 来凤县| 循化| 乳山市| 安平县| 屯门区| 新余市| 加查县| 紫云| 沁水县| 屯留县| 安国市| 会宁县| 乾安县| 保德县| 巧家县| 遂溪县| 瑞丽市| 白山市| 余江县| 南丰县| 张北县| 乳源|