вот строка:
$test = '<a id="test">One & -Two - Three</a>';
И я хотел бы поймать эти две строки в переменную 2 дифференциала, как:
$string1 = 'One & -Two';
а также
$string2 = 'Three';
Поэтому я использую preg_match_all, но у меня есть проблема с регулярным выражением:
preg_match_all('#([-;\w\ \.\/\'\d\(\)\&]+)+ - ([\w+\ \.\-]+)+#', $test, $matches);
Может кто-нибудь объяснить мне, почему это не работает ..? Я не вижу, какое «правило» я не уважаю здесь ..
Первый +
после )
(([-;\w\ \.\/\'\d\(\)\&]+)+
) вызывает катастрофическую проблему с возвратом (увидеть подробнее об этом здесь) как это случай (a+)+
тип шаблона, который не является конечным подшаблоном. Удаление этого +
уже решает проблему.
Последний подшаблон имеет ту же проблему, но не вызывает проблем из-за внутренней оптимизации PCRE.
Кроме того, я думаю, что вам не нужно никаких регулярных выражений здесь, используйте explode
а также strip_tags
:
$test = '<a id="test">One & -Two - Three</a>';
$res = explode(" - ", strip_tags($test));
echo $res[0]. "\n" . $res[1];
Увидеть PHP демо
Других решений пока нет …