[英]preg_match search
<?php
$content = "
{php
{php 1 php}
{php 2 php}
{php 3 php}
php}";
我怎么能得到4個字符串?
第一:
{php 1 php}
{php 2 php}
{php 3 php}
第二:
1
第三:
2
四:
3
雖然您可以使用簡單的計數器輕松解析此類輸入,但可以使用遞歸正則表達式來獲取所需內容。 一個簡單的(?)正則表達式來驗證輸入將是:
^({php\s*(\d+|(?1)+)\s*php}\s*)$
(?1)
是一個遞歸匹配,它試圖再次匹配第一個組,這是另一個{php ... php}
標記。 我們還在php
之間有一個捕獲組來捕獲它們的內容。
在您的情況下,您希望捕獲重疊結果(事實上,甚至包含在其他結果中的結果)。 這甚至不那么漂亮,但仍然可以使用前瞻。 環視可以有捕獲組,因此模式將是:
(?=({php\s*(\d+|(?1)+)\s*php}\s*))
結果有兩個額外的捕獲組 - 空白結果用於環顧四周,整個標記用外部{php ... php}
,但如果你使用PREG_PATTERN_ORDER
你的預期結果將在第三個位置( [2]
) :
[2] => Array
(
[0] => {php 1 php}
{php 2 php}
{php 3 php}
[1] => 1
[2] => 2
[3] => 3
)
這是一個更復雜的例子: http : //ideone.com/sWWrT
現在,強制要求謹慎。 正如我之前所說的,通過一個簡單的深度計數器,它更具可讀性和可維護性,除了娛樂用途之外,你真的不需要這里的正則表達式。
$regex = preg_match_all("/({php (\d+) php})+/", $content);
$regex[0][0] == "{php 1 php}";
$regex[0][1] == "{php 2 php}";
$regex[0][2] == "{php 3 php}";
end($regex)[0] == "1";
end($regex)[1] == "2";
end($regex)[2] == "3";
正在尋找這樣的東西?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.