<?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
,那么代码就是真实的。
老实说,我不明白为什么第一个给我假,其他人真实。谁能解释我为什么?
答案 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';
}
?>
点击此处查看结果:
答案 1 :(得分:0)
[a-z]
只捕获一个字符,而[a-z]*
捕获的字符长度最多为0到n。
您的模式应该由/
/<p>[a-z]*<p>/i
答案 2 :(得分:0)
我几天前发布了另一个问题作为评论。
我会以邮寄方式询问。
如果[a-z]被视为一个字符。
<?php
$regex = '<p>ttt<p>';
if (preg_match('/<p>[a-z]<p>/i', $regex, $result))
{
echo 'True';
echo $result[0];
}
else
{
echo 'False';
}
?>
&#13;
给我假,因为&#39; ttt&#39;基本上是3个字符,对吗?
然而,
<?php
$regex = '<p>ttt<p>';
if (preg_match('/[a-z]/i', $regex, $result))
{
echo 'True';
echo $result[0];
}
else
{
echo 'False';
}
?>
&#13;
这段代码给我的确如此,但上面的字符串基本上是9个字符。