Рассмотрим следующую строку:
I have been driving to {Palm.!.Beach:100} and it . was . great!!
Я использую следующее регулярное выражение для удаления всех знаков препинания:
$string preg_replace('/[^a-zA-Z ]+/', '', $string);
Эти результаты:
I have been driving to PalmBeach and it was great!!
Но мне нужно, чтобы регулярное выражение всегда игнорировало все, что находится между {и}. Таким образом, желаемый результат будет:
I have been driving to {Palm.!.Beach:100} and it was great
Как я могу позволить регулярному выражению игнорировать то, что находится между {и}?
Попробуй это
[^a-zA-Z {}]+(?![^{]*})
См. Здесь, в Regexr
Средство соответствует всем, что не входит в отрицательный класс символов, но только если нет закрывающей скобки впереди без открытия раньше, это делается с помощью отрицательного lookahead (?![^{]*})
.
$string preg_replace('/[^a-zA-Z {}]+(?![^{]*})/', '', $string);
$str = preg_replace('(\{[^}]+\}(*SKIP)(*FAIL)|[^a-zA-Z ]+)', '', $str);
См. Также Разделите строку разделителем, но нет, если она экранирована .