2014-12-21 3 views
0

В вопросе я по существу ищу некоторую помощь с регулярным выражением.Селектор атрибутов css/jQuery в php

Вот образец, который я сейчас использую:

preg_match_all("~\[([^\]]+)=([^\[]+)\]~", $search, $matches, PREG_SET_ORDER); 

Это прекрасно работает:

'[name=test][type=select]' 

Результат:

MATCH 1 
1. [1-5] `name` 
2. [6-10] `test` 
MATCH 2 
1. [12-16] `type` 
2. [17-23] `select` 

demo

Проблема возникает с

'[for=event[schedule]]' 

Очевидно Что происходит это дополнительные [ «s и ]» s предотвратить регулярное выражение из сопоставления строки.

Я ищу предложения о том, как исправить шаблон регулярного выражения, чтобы получить этот результат:

MATCH 1 
1. [1-3] `for` 
2. [5-19] `event[schedule]` 

ответ

1

Если вы хотите дополнительно соответствовать [...] часть:

preg_match_all('~\[([^\]]+)=([^\]\[]+(?:\[[^\]]+\])?)\]~', $search, $matches, PREG_SET_ORDER); 

Чтобы требовать его:

preg_match_all('~\[([^\]]+)=([^\]\[]+\[[^\]]+\])\]~', $search, $matches, PREG_SET_ORDER); 
Смежные вопросы