На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ALXR
  
    > повторить группу
      допустим есть такое:
      1
      0
      1
      1/2
      1/3
      2/5

      ребулярка:
      ExpandedWrap disabled
        ^\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

      такое возможно вообще?
        Невозможно - подстрока может быть только в одной группе. Да и зачем такое извращение? Разбиение на группы информативно - позволяет сразу определить, какой именно случай встретился. Если свалить все в одну кучу, то различить, например, строки "1" и "1/1" будет сложнее.

        В принципе, можно написать регвыр, возвращающий две группы, одна из которых в случае обычного числа будет пуста. Например:

        ^\s*(\d{1,6})(?:\\|\/(\d{1,6}))?\s*$
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0213 ]   [ 15 queries used ]   [ Generated: 28.04.24, 00:42 GMT ]