الحصول على موقف كل المباريات في المجموعة
سؤال
النظر في المثال التالي:
$target = 'Xa,a,aX';
$pattern = '/X((a),?)*X/';
$matches = array();
preg_match_all($pattern,$target,$matches,PREG_OFFSET_CAPTURE|PREG_PATTERN_ORDER);
var_dump($matches);
ما لا يعود إلا آخر 'a' في هذه السلسلة, ولكن ما أريد هو كل هذا.
لا سيما أحتاج موقف كل كل من في 'a داخل السلسلة بشكل منفصل, وبالتالي PREG_OFFSET_CAPTURE.
على سبيل المثال هو أكثر تعقيدا بكثير ، انظر ذات السؤال: مطابقة نمط مجموعة لا عناصرها في حد ذاتها
شكرا
المحلول
مجموعات مباراة واحدة منذ regex X((a),?)*X
مباريات السلسلة بأكملها.آخر ((a),?)
سيتم تجميع.
ماذا تريد أن المباراة هو a
أن X
قبل ذلك (و بداية السلسلة) ، وقد فاصلة قبل ذلك ، أو X
قبل ذلك (نهاية السلسلة).
$target = 'Xa,a,aX';
$pattern = '/(?<=^X)a|a(?=X$|,)/';
preg_match_all($pattern, $target, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
الإخراج:
Array
(
[0] => Array
(
[0] => Array
(
[0] => a
[1] => 1
)
[1] => Array
(
[0] => a
[1] => 3
)
[2] => Array
(
[0] => a
[1] => 5
)
)
)
نصائح أخرى
عندما regex يتضمن X, يطابق مرة واحدة.فإنه يجد واحدة كبيرة تتطابق مع مجموعات في ذلك.ما تريده هو العديد من المباريات ، مع كل موقف خاص بها.
لذا في رأيي أفضل ما يمكنك القيام به هو ببساطة البحث عن /أ/ أو /a,?/ دون أي X.ثم مباريات[0] سوف تحتوي على جميع المظاهر من 'a'
إذا كنت في حاجة إليها بين X, قبل اختيار هذا الجزء من السلسلة.