PDA

View Full Version : سوال: پردازش رشته با Regular Expression



moallemi
دوشنبه 22 مهر 1387, 21:01 عصر
سلام

من تو کد PHP نیاز به پردارش یه رشته دارم که اگه بخوام به صورت معمولی پردازشش کنم تعداد if و else ها و حالت های خاصش خیلی زیاد میشه! کسی میتونه با استفاده از Regular Expression کمکم کنه؟


$string = "keyword1 keyword2 source:src1,'src2 with space',src3 category:cat1,cat2"

این نتیجه رو میخوام


Array
(
[keyword] => Array
(
[0] => keyword1
[1] => keyword2
)

[source] => Array
(
[0] => src1
[1] => src2 with space
[2] => src2
)
[category] => Array
(
[0] => cat1
[1] => cat2
)

)

org.kiani
دوشنبه 22 مهر 1387, 23:12 عصر
<pre>
<?

function parser( $val ) {
if( strstr( $val, " " ) && !strstr( $val, "," )) {
return explode( " ", $val );
}
return preg_split( "/,'|',|,/", $val );
}

$str = "keyword1 keyword2 source:src1,'src2 with space',src3 category:cat1,cat2";
$keys = array( 'keyword', 'source', 'category' );

$array = preg_split( "/source:|category:/", $str );
$array = array_combine( $keys, $array );
$array = array_map( "parser", $array );

print_r( $array );

?>

moallemi
سه شنبه 23 مهر 1387, 18:12 عصر
مرسی خیلی عالی بود! میشه طوری تغییرش داد که اگه جای مثلا keyword ها و category ها عوض شد ، بازم جواب بده؟

org.kiani
سه شنبه 23 مهر 1387, 18:26 عصر
توی آرایه keys$ جاشون رو عوض کنید.
اما یک سوال، این رشته چرا هر جاییش یه سازی می زنه؟ نمی شه استاندارد ترش کرد؟

org.kiani
سه شنبه 23 مهر 1387, 18:28 عصر
مرسی خیلی عالی بود! میشه طوری تغییرش داد که اگه جای مثلا keyword ها و category ها عوض شد ، بازم جواب بده؟
یک مثال بزنید تا بهتر بشه بررسیش کرد.