2013-08-15 3 views
0

Я ищу шаблон PCRE, который будет соответствовать тексту между разделителями любым действительным шаблоном PCRE независимо от используемых разделителей и модификаторов.Образец PCRE, который соответствует текстовому рисунку PCRE

+0

Приведите пример. –

+0

@JasonMcCreary Match 'text' в'/text/',' {text} iu' и т. Д. –

+0

Просьба также показать нам, что вы пробовали, что не сработало. Кроме того, вы знаете, что вам нужно анализировать регулярное выражение, если вы хотите убедиться, что шаблон действителен? –

ответ

2

Имеются четыре раздельных разделителя, насколько мне известно: (), [], {}, <>. Все остальные допустимые символы используются только дважды. Согласно documentation, мы можем использовать любой символ, не являющийся буквенно-цифровым, без пробелов, без обратного слэша. Так эта схема должна работать:

/ 
^ 
(?=([^a-zA-Z0-9\s\\\\])) # make sure the pattern begins with a valid delimiter 
         # and capture it into group 1 
(?|      # alternation for different delimiter types 
         # each alternative captures the pattern into group 2 
    \((.*)\)    # handle (...) 
| 
    \[(.*)\]    # handle [...] 
| 
    \{(.*)\}    # handle {...} 
| 
    <(.*)>     # handle <...> 
| 
    .(.*)\1    # handle all other delimiters with a backreference 
) 
[imsxeADSUXu]*   # allow for modifiers 
$ 
/xs 

Если вы используете этот $pattern в

preg_match($pattern, $input, $matches); 

тогда вы найдете нужный вам результат в $matches[2].

Конечно, это примут кучу недействительных шаблонов, поскольку это не гарантирует, что разделитель не появится где-то раньше в шаблоне.

+0

Вау, спасибо. –

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