PHP判斷表達(dá)式中括號(hào)是否匹配
學(xué)習(xí)PHP語(yǔ)言的時(shí)候,初學(xué)者往往會(huì)對(duì)數(shù)組感到一些棘手。不過(guò)在通過(guò)深入的學(xué)習(xí)之后,我們會(huì)發(fā)現(xiàn),這些其實(shí)并沒(méi)有想象中的困難。下面小編就為大家?guī)?lái)一篇PHP判斷表達(dá)式中括號(hào)是否匹配的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。
復(fù)制代碼 代碼如下:
<table>
<tr><td>aaaa</td></tr>
<tr><td>bbbb</td></tr>
<tr><td>cccc</td></tr>
<tr><td>dddd</td></tr>
</table>
像這種的文本,用PHP的正則表達(dá)式怎么匹配??
我最初的想法:
pattern:"/<tr>[.n]*?</tr>"(這個(gè)是錯(cuò)誤的)
想法思路:"."能匹配任意非換行字符,使用"[.n]"組合,使其能夠匹配所有的字符(包括換行符),但天有不測(cè)風(fēng)云啊——悲劇了,結(jié)果什么都沒(méi)有!
經(jīng)過(guò)一番啃骨之后寫了另一個(gè)
pattern:"/<tr>(.|n)*?</tr>"(這個(gè)是可以)
將“[]”換成"()",使用“|”做一個(gè)或選擇,這樣就行了(納悶了,怎么"[]"也是選擇方式的就不行???)
網(wǎng)上也有一答案:
PATTEN: "/<tr>.*?</tr>/is"(很簡(jiǎn)潔很方便,贊成此方法)
后記: 怎么"[]"也是選擇方式的就不行???你知道的話別忘了告訴小弟一聲哦……
[]里的.相當(dāng)于.,仔細(xì)看正則的說(shuō)明去吧
涉及到換行一般考慮用模式修正符s
s (PCRE_DOTALL)
如果設(shè)置了這個(gè)修飾符, 模式中的點(diǎn)號(hào)元字符匹配所有字符, 包含換行符. 如果沒(méi)有這個(gè) 修飾符, 點(diǎn)號(hào)不匹配換行符.
[]里面的是一些范圍或者組合
lz試一下"/<tr>[.]*?</tr>/is"這個(gè)就知道了,
還有()很強(qiáng)大的</p
如下所示:
<?php
/**
* title: 判斷表達(dá)式中括號(hào)是否匹配
* Description: () 匹配 )(不匹配 利用壓棧和出棧
* @author Mr Lv
*/
function isValid($expstr) {
$temp = array();
for ($i=0; $i<strlen($expstr); $i++) {
$ch = $expstr[$i];
switch($ch) {
case '(':
array_push($temp, '(');
break;
case ')':
if (empty($temp) || array_pop($temp) != '(') {
return "缺少左括號(hào)(";
}
}
}
return empty($temp) == true ? "表達(dá)式匹配" : "缺少右括號(hào))";
}
$expstrA = "(1+3(6*4)-(2+3))()(";
$expstrB = "(1+3(6*4)-(2+3))()";
$expstrC = "(1+3(6*4)-(2+3)))";
echo isValid($expstrA);
echo "<br>";
echo isValid($expstrB);
echo "<br>";
echo isValid($expstrC);
?>
頁(yè)面信息:
?
1
2
3
缺少右括號(hào))
表達(dá)式匹配
缺少左括號(hào)(
【PHP判斷表達(dá)式中括號(hào)是否匹配】相關(guān)文章:
PHP判斷表達(dá)式中括號(hào)是否匹配的簡(jiǎn)單實(shí)例05-31
判斷PHP數(shù)組是否為空的代碼08-26
PHP如何判斷數(shù)組是否為空07-26
PHP正則匹配中文字母數(shù)字正則的表達(dá)式07-14
PHP正則匹配中文字母數(shù)字正則表達(dá)式09-25
PHP判斷遠(yuǎn)程url是否有效的幾種方法09-27
PHP中判斷變量為空的方法06-18