يمكن preg_match () (أو وظيفة PHP Regex الأخرى) تطابق عدد متغير من الأسهم الفرعية بين قوسين؟

StackOverflow https://stackoverflow.com/questions/1294721

  •  18-09-2019
  •  | 
  •  

سؤال

لنفترض أن لدي '/srv/www/site.com/htdocs/system/application/views/' وتريد اختبارها ضد Regexp التي تطابق اسم دليل في المسار؟

شيئا ما مثل هذا النمط: '(/[^/])'
أن تسفر عن مجموعة مع 'srv','www','site.com'... إلخ.

ملاحظة: بناء جملة Regoxp، كتب فقط للتوضيح، لم يتم اختباره وبالتأكيد خطأ، ولكن فقط لإعطاء فكرة.

PS2: أعرف أن هناك explode() ولكن دعونا نرى ما إذا كان بإمكاننا القيام بذلك باستخدام Regexp (إنه مفيد للغات والأطر الأخرى التي لا تنفجر).

هل كانت مفيدة؟

المحلول

preg_match_all:

$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 () والتي قد تكون أكثر ملاءمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top