PDA

View Full Version : مشكل با عبارات با قاعده



Reza1607
دوشنبه 15 آبان 1391, 10:11 صبح
سلام دوستان من مي خوام با استفاده از regex بيام و رشته اي مثل



<fr:category_menu>
ID : <fr:categoryId>
<br />
Title : <fr:categoryTitle>
<hr />
</fr:category_menu>


رو به صورت زير جدا كنم


[0] => Array
(
[0]=><fr:category_menu>
ID : <fr:categoryId>
<br />
Title : <fr:categoryTitle>
<hr />
</fr:category_menu>
)

[1] => Array
(
[0]=>category_menu
)

[2] => Array
(
[0]=>ID : <fr:categoryId>
<br />
Title : <fr:categoryTitle>
<hr />
)


يعني بيام كل تگ + نام تگ + محتويات اون رو جدا سازي كنم براي اين كار من از پترن زير استفاده كردم


$pattern="(\<fr:([^\>\/]+)\>(.+)\</fr:\1\>)";

و با استفاده از دستور preg_match_all اون رو روي رشته مورد نظرم اجرا كردم ولي مشكل داره بعد از بررسي كه كردم ديدم كه كاراكتر \n ( اينتر) رو قبول نمي كنه براي همين هم پترن رو به صورت زير تغيير دادم


$pattern="(\<fr:([^\>\/]+)\>(.|\n)+\</fr:\1\>)";

با اين كار صفحه كلا اجرا نميشه
:ناراحت:
اگه كمك كنيد ممنون ميشم
اين رو هم بگم كه با يك نرم افزار پترن دوم رو تست كردم و جواب داد نمي دونم چرا وقتي تو فايلم مي زارم اجر نميشه

Reza1607
دوشنبه 15 آبان 1391, 12:16 عصر
خودم پيدا كردم بايد اين جوري باشه


(\<fr:([^\>\/]+)\>(.+?)\</fr:\1\>)s

خوب مشكل كجا بود
براي حل مشكل اينتر از حرف s بعد از عبارت استفاده ميشه به اين معني كه رشته رو در يك خط در نظر بگيري( يعني اينتر رو ناديده بگير)
و مشكل دوم علامت سوال بعد از عبارت .+ هست براي اين كه تگ پاياني رو درست تشخيص بده اين علامت ؟ هم لازم بود