簡體   English   中英

我需要有關正則表達式php的幫助

[英]I need help about regex php

<?php
$regex = '<p>ttt<p>';

if (preg_match('#<p>[a-z]<p>#i', $regex, $result))
{
    echo 'True';
    echo $result[0];
}
else
{
    echo 'False';
}

?>

基本上,這段代碼給我False。 但是,如果我將[az]替換為[az]*則代碼會正確。

或者,如果我保留[az]而不帶* ,但是我刪除了preg_match中的<p><p> ,則代碼使我成為true。

老實說,我不明白為什么第一個給我假,而其他給我假。 誰能解釋我為什么?

不管您信不信, [az]被認為是一個字符。 就像我放[ab] ,那也將是“一個字符”。 [az] 表示字符可以是任何字母:abcdefghijklmnopqrstuvwxyz。 現在,當我們添加[az]*我們允許[az]一個字符具有0個或多個重復。

<?php
$regex = '<p>ttt<p>';

if (preg_match('#<p>[a-z]*<p>#i', $regex, $result))
{
    echo 'True';
    echo $result[0];
}
else
{
    echo 'False';
}

?>

在這里查看結果:

https://eval.in/753902

[az]僅捕獲一個字符,而[az]*捕獲長度最大為0到n的字符。

並且您的模式應該用/封裝

/<p>[a-z]*<p>/i

我幾天前發布了另一個問題作為評論。

我會以職位要求。

如果[az]被認為是一個字符。

  <?php $regex = '<p>ttt<p>'; if (preg_match('/<p>[az]<p>/i', $regex, $result)) { echo 'True'; echo $result[0]; } else { echo 'False'; } ?> 

給我假,因為'ttt'基本上是3個字符,對嗎?

然而,

 <?php $regex = '<p>ttt<p>'; if (preg_match('/[az]/i', $regex, $result)) { echo 'True'; echo $result[0]; } else { echo 'False'; } ?> 

這段代碼使我成真,但是上面的字符串基本上是9個字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM