Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.131.168] |
|
Сообщ.
#1
,
|
|
|
допустим есть такое:
1 0 1 1/2 1/3 2/5 ребулярка: ^\s*(\d{1,6})[\\|\/](\d{1,6})|([0|1])\s*$ возвращает такие группы: Цитата Match 1 1. 2. 3. 1 Match 2 1. 2. 3. 0 Match 3 1. 2. 3. 1 Match 4 1. 1 2. 2 3. Match 5 1. 1 2. 3 3. Match 6 1. 2 2. 5 3. http://rubular.com/r/IDOObgWcK1 мне нужно, чтобы возвращало 2 группы, а не 3, и не так, как тут, а для 1 0 1 чтобы возвращало такое, чтоб повторялось в первую и вторую группу: Цитата Match 1 1. 1 2. 1 Match 2 1. 0 2. 0 Match 3 1. 1 2. 1 и так далее: Цитата Match 4 1. 1 2. 2 Match 5 1. 1 2. 3 Match 6 1. 2 2. 5 такое возможно вообще? |
Сообщ.
#2
,
|
|
|
Невозможно - подстрока может быть только в одной группе. Да и зачем такое извращение? Разбиение на группы информативно - позволяет сразу определить, какой именно случай встретился. Если свалить все в одну кучу, то различить, например, строки "1" и "1/1" будет сложнее.
В принципе, можно написать регвыр, возвращающий две группы, одна из которых в случае обычного числа будет пуста. Например: ^\s*(\d{1,6})(?:\\|\/(\d{1,6}))?\s*$ |