يمكن preg_match () (أو وظيفة PHP Regex الأخرى) تطابق عدد متغير من الأسهم الفرعية بين قوسين؟
-
18-09-2019 - |
سؤال
لنفترض أن لدي '/srv/www/site.com/htdocs/system/application/views/'
وتريد اختبارها ضد Regexp التي تطابق اسم دليل في المسار؟
شيئا ما مثل هذا النمط: '(/[^/])'
أن تسفر عن مجموعة مع 'srv','www','site.com'...
إلخ.
ملاحظة: بناء جملة Regoxp، كتب فقط للتوضيح، لم يتم اختباره وبالتأكيد خطأ، ولكن فقط لإعطاء فكرة.
PS2: أعرف أن هناك explode()
ولكن دعونا نرى ما إذا كان بإمكاننا القيام بذلك باستخدام Regexp (إنه مفيد للغات والأطر الأخرى التي لا تنفجر).
المحلول
$str = '/srv/www/site.com/htdocs/system/application/views/';
preg_match_all('/\/([^\/]+)/', $str, $matches);
// $matches[0] contains matching strings
// $matches[1] contains first subgroup matches
print_r($matches[1]);
انتاج:
Array
(
[0] => srv
[1] => www
[2] => site.com
[3] => htdocs
[4] => system
[5] => application
[6] => views
)
نصائح أخرى
هنالك preg_split
لتقسيم الملفات على التعبيرات العادية مماثلة لتنفجر، ثم هناك preg_match_al
ل الذي يفعل ما تريد.
لا أعتقد أنك تستطيع، ولكن يمكنك استخدامها بدلا من ذلك preg_match_all () للحصول على مباريات متعددة من تعبير منتظم. يوجد ايضا preg_split () والتي قد تكون أكثر ملاءمة.