當前位置:才華齋>計算機>php語言>

PHP判斷表示式中括號是否匹配

php語言 閱讀(2.44W)

學習PHP語言的時候,初學者往往會對陣列感到一些棘手。不過在通過深入的學習之後,我們會發現,這些其實並沒有想象中的困難。下面小編就為大家帶來一篇PHP判斷表示式中括號是否匹配的簡單例項。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧。

PHP判斷表示式中括號是否匹配

  複製程式碼 程式碼如下:

<table>

<tr><td>aaaa</td></tr>

<tr><td>bbbb</td></tr>

<tr><td>cccc</td></tr>

<tr><td>dddd</td></tr>

</table>

像這種的文字,用PHP的正則表示式怎麼匹配??

我最初的想法:

pattern:"/<tr>[.n]*?</tr>"(這個是錯誤的)

想法思路:"."能匹配任意非換行字元,使用"[.n]"組合,使其能夠匹配所有的字元(包括換行符),但天有不測風雲啊——悲劇了,結果什麼都沒有!

經過一番啃骨之後寫了另一個

pattern:"/<tr>(.|n)*?</tr>"(這個是可以)

將“[]”換成"()",使用“|”做一個或選擇,這樣就行了(納悶了,怎麼"[]"也是選擇方式的.就不行???)

網上也有一答案:

PATTEN: "/<tr>.*?</tr>/is"(很簡潔很方便,贊成此方法)

後記: 怎麼"[]"也是選擇方式的就不行???你知道的話別忘了告訴小弟一聲哦……

[]裡的.相當於.,仔細看正則的說明去吧

涉及到換行一般考慮用模式修正符s

s (PCRE_DOTALL)

如果設定了這個修飾符, 模式中的點號元字元匹配所有字元, 包含換行符. 如果沒有這個 修飾符, 點號不匹配換行符.

[]裡面的是一些範圍或者組合

lz試一下"/<tr>[.]*?</tr>/is"這個就知道了,

還有()很強大的</p

如下所示:

<?php

/**

* title: 判斷表示式中括號是否匹配

* 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 "缺少左括號(";

}

}

}

return empty($temp) == true ? "表示式匹配" : "缺少右括號)";

}

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

?>

頁面資訊:

?

1

2

3

缺少右括號)

表示式匹配

缺少左括號(