2011-05-24 4 views
3

Есть ли возможность обрабатывать несколько регулярных выражений в PHP (или вообще)?Несколько регулярных выражений в PHP

У меня есть код ниже, чтобы заменить не буквенно-цифровые символы черточками, как только произошла замена. Я хочу удалить экземпляры нескольких тире.

$slug = preg_replace('/[^A-Za-z0-9]/i', '-', $slug); 
$slug = preg_replace('/\-{2,}/i', '-', $slug); 

Есть ли более простой способ сделать это? т.е. настроить шаблон регулярного выражения для замены одного шаблона, а затем другого?

(я, как ребенок, с вилкой в ​​розетке, когда речь идет о регулярном выражении)

ответ

4

Вы можете устранить второй preg_replace, говоря, что вы на самом деле означает в первом:

$slug = preg_replace('/[^a-z0-9]+/i', '-', $slug); 

То, что вы на самом деле имею в виду «заменить все последовательности из одного или более не буквенно-цифровых символов с одним дефисом» и это то, что делает /[^a-z0-9]+/i. Кроме того, вам не нужно включать буквы верхнего и нижнего регистра при указании нечувствительного к регистру регулярного выражения, поэтому я взял это.

+0

спасибо, это имеет смысл. – navitronic

2

Нет. То, что у вас есть соответствующий способ справиться с этой проблемой.

Рассмотрите это с помощью этого угла: регулярные выражения предназначены для того, чтобы найти шаблон (single pattern) и справиться с ним как-то. Таким образом, пытаясь разобраться с более чем одним шаблоном за раз, вы только даете себе головные боли. Это лучше, как и для всех участников.

+0

Согласовано. Я усвоил этот трудный путь. – csano

0

Если $slug уже не имеет нескольких переносов, то вы можете избежать 2-го preg_replace вызова с помощью первого вызова preg_replace, как это:

$slug = preg_replace('/[^a-z0-9]+-?/i', '-', $slug); 

Приведенный выше код будет найти не алфавитно-цифровой символ необязательно с последующим по дефиса и замените этот согласованный текст на один дефис -. поэтому не нужно делать второй вызов preg_replace.

+0

См. Принятый ответ для варианта того, что вы предлагаете, что, на мой взгляд, немного более гибко. Спасибо за ответ, хотя. – navitronic

Смежные вопросы