我需要有关正则表达式php的帮助

时间:2017-03-14 03:19:31

标签: php regex

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

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

?>

基本上,这段代码给了我假。但是,如果我将[a-z]替换为[a-z]*代码,则说明我是真的。

或者,如果我保留[a-z]而没有*,但我删除了<p><p>中的preg_match,那么代码就是真实的。

老实说,我不明白为什么第一个给我假,其他人真实。谁能解释我为什么?

3 个答案:

答案 0 :(得分:2)

不管你信不信,

[a-z]被认为是一个角色。就像我放[ab]一样,那就是&#34;一个字符&#34;太。 [a-z] 表示该字符可以是任何字母:abcdefghijklmnopqrstuvwxyz。当我们添加[a-z]*时,我们现在允许[a-z]的一个字符重复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

答案 1 :(得分:0)

[a-z]只捕获一个字符,而[a-z]*捕获的字符长度最多为0到n。

您的模式应该由/

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

答案 2 :(得分:0)

我几天前发布了另一个问题作为评论。

我会以邮寄方式询问。

如果[a-z]被视为一个字符。

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

给我假,因为&#39; ttt&#39;基本上是3个字符,对吗?

然而,

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

这段代码给我的确如此,但上面的字符串基本上是9个字符。