Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[98.82.140.17] |
|
Сообщ.
#1
,
|
|
|
Упрощенно сформулирую задачу.
Надо php сделать парсер параметров, которые записаны в виде: переменная=значение Каждая такая пара разделена пробелами. Теперь мне нужно как-то записывать значения параметров, в которых есть пробелы. Хочу в этом случае писать так: переменная={значение с пробелами} Почему-то не работает даже такой условный шаблон =(?(\{)[\w\s]+\}|[\w]+) Сообщается: Compilation failed: assertion expected after (?( at offset 9 in Хотя он не то, что мне нужно, он забирает и правую скобку. Хотелось бы в одну маску забирать только значение переменной без всяких скобок. |
Сообщ.
#2
,
|
|
|
ну во первых после знака вопроса должен стоять знак равно. ну и во вторых нужно выделить условие в группу
Цитата =((?={)[^}]+}|[^\s]+) |
Сообщ.
#3
,
|
|
|
Цитата ViktorXP @ ну во первых после знака вопроса должен стоять знак равно. ну и во вторых нужно выделить условие в группу Цитата =((?={)[^}]+}|[^\s]+) Но ведь (?= означает условия на последующий текст. http://php.net/manual/ru/regexp.reference.assertions.php И потом, ваш шаблон из xxx={yyy} выхватит yyy}, а нужно yyy. Вообще, хочу как-то использовать условные подмаски http://php.net/manual/ru/regexp.reference.conditional.php Если встретили скобку {, то проверяем по одному шаблону, если не встретили, то другому. Причем наличие правой скобки тоже надо требовать условно. |
Сообщ.
#4
,
|
|
|
ну можно взять в группу и убить последнюю скобку.
Цитата =((?={){([^}]+)|[\w]+) просто не совсем понятно что ты хотел с самого начала. если поддерживает движок то можно вообще воспользоватся "просмотром вперед" Цитата (?<=={)[\w\s\d]+|(?<==)[\w\d]+ https://regex101.com/r/uO0xA7/1 |