Ограничения регулярных выражений PHP, / vs. | vs. {}, каковы различия?

В руководстве PHP PCRE, http://us.php.net/manual/en/pcre.examples.php , он дает 4 примера допустимых шаблонов:

  • /<\/\w+>/
  • |(\d{3})-\d+|Sm
  • /^(?i)php[34]/
  • {^\s+(\s+)?$}

Кажется, что / , | или пару фигурных скобок можно использовать в качестве разделителей, так есть ли разница между ними?

Никакой разницы, кроме закрывающего разделителя, не может появиться без экранирования.

Это полезно, когда стандартный разделитель используется много, например, вместо

 preg_match("/^http:\\/\\/.+/", $str); 

ты можешь написать

 preg_match("[^http://.+]", $str); 

чтобы избежать необходимости избегать / .

Фактически вы можете использовать любой алфавитно-цифровой разделитель (исключая пробелы и обратную косую черту)

 "%^[az]%" 

работает так же, как и

 "*^[az]*" 

так же как

 "!^[az]!"