PDA

View Full Version : جواب غیر منطقی از ereg



tafrihat
پنج شنبه 11 شهریور 1389, 12:56 عصر
if(ereg("ab{2,4}","abbbbbbbbbb"))
echo "yes";
else
echo "no";

مگه اینجا نمیگه که حداقل 2 تا bو حداکثر تا 4 تا b میتونه داشته باشه اما چرا این رشته ما با بیش از 4 تا b هنوز تابع ما yes بر می گردونه

bestirani2
پنج شنبه 11 شهریور 1389, 14:09 عصر
اینجا میگه ab باشه

shahriyar3
پنج شنبه 11 شهریور 1389, 14:37 عصر
if(ereg("ab{2,4}","abbbbbbbbbb"))
echo "yes";
else
echo "no";




if(ereg("([a,b]{2,4})"),"abbbbbbbbbbbbbbb")
.....
.
:چشمک:

tafrihat
پنج شنبه 11 شهریور 1389, 15:25 عصر
if(ereg("([a,b]{2,4})"),"abbbbbbbbbbbbbbb")
.....
.
:چشمک:
این کد شما چیه اصلا که دادی؟:متفکر:
--------------------

اینجا میگه ab باشه
خیلی ببخشیدا پس این چیه؟ {2,4}
پس چرا این


ereg("ab{2,4}","ab"))

که ab داره false میده

bestirani2
پنج شنبه 11 شهریور 1389, 17:26 عصر
منظورم این بود ab حتماً باید توی عبارت بشه و bbbba قبول نیست
که چون داشتم جایی میرفتم منظورتون رو بعد فهمیدم
واسه این میشه هر چه قدر b نوشت که ما محدودیتی ندادیم
حالا اگه بگی این b ها آخرین باشند، دیگه نمیشه هر چند تا نوشت
به هر حال ما بعد و قبل این الگو هر چی میتوانیم بنویسیم که b هم جزئش هست


if(ereg("ab{2,4}$","bbbbbabbbb"))

sama01
پنج شنبه 11 شهریور 1389, 17:35 عصر
if(ereg("ab{2,4}","abbbbbbbbbb"))
echo "yes";
else
echo "no"; ببینید. regex درست نیست. در این regex شما می‌گی که آیا در رشته‌ی مورد نظر، pattern مورد نظر وجود دارد یا نه. خوب طبیعتا جواب yes خواهد بود. زیرا در رشته‌ی شما abbb وجود دارد.
حتی این کد شما برای asdfabbbbbbbbbb هم yes خواهد داد. زیرا در این رشته هم abbb وجود دارد.

راه حل چیست؟
اگر می‌خواهید کلا رشته‌ی شما حداکثر abbb باشد باید بگویید رشته محدود به همین‌باشد.
این طوری:

if(ereg("^ab{2,4}$","abbbbbbbbbb"))
echo "yes";
else
echo "no"; یعنی با ^ می‌گویی رشته آغاز شود و با $ می‌گویی رشته تمام. بنابراین رشته‌ی شما حتما باید یکی از صورت‌های abb - abbb - abbbb را داشته باشد.

tafrihat
پنج شنبه 11 شهریور 1389, 18:18 عصر
آقا اینا رو اجرا کنید تا متوجه منظورم بشید


<?php
if(ereg("ab{2,4}","ab"))
echo "true";
else
echo "false";
echo "<hr>";

if(ereg("ab{2,4}","abb"))
echo "true";
else
echo "false";
echo "<hr>";


if(ereg("ab{2,4}","abbb"))
echo "true";
else
echo "false";
echo "<hr>";

if(ereg("ab{2,4}","abbbb"))
echo "true";
else
echo "false";
echo "<hr>";


if(ereg("ab{2,4}","abbbbb"))
echo "true";
else
echo "false";
echo "<hr>";


if(ereg("ab{2,4}","abbbbbbbbbbbbbbbbbbb"))
echo "true";
else
echo "false";


?>

به ترتیب



false
true
true
true
true
true

مشکلم اینه که چرا تو حداقل اگر رعایت نکنیم فالس میده اما توی حداکثر 10 تا b هم که باشه true میده
آخری گفته حداکثر 4 تا b ما با 5 تا هم true میده

sama01
پنج شنبه 11 شهریور 1389, 18:36 عصر
کاری که من گفتم رو انجام بدید درست می‌شه.
شما باید متن‌تان را محدود کنید. ابتدا و انتهای regex شما باز است و همین موضوع مشکل ایجاد می‌کنه.

من که گفتم regex شما حتی xxxxxabbbbbbb تایید می‌کنه. زیرا فقط به دنبال abb - abbb - abbbb می‌گرده و طبیعتا پیدا هم می‌کنه.

کاری که من گفتم رو انجام بدید حل می‌شه.

tafrihat
پنج شنبه 11 شهریور 1389, 18:38 عصر
چشم
ممنون عزیز