2013-06-06 3 views
3

У меня есть строка, как этот один:Regex - Найдите все группы, где вы можете найти заданное число

:1-2-35:2-3-1:5-6-27456:35-2-11:9-5-6:1-5-2: 

Я хотел бы получить все группы, содержащие номер 2 Строка всегда состоит из группы из 3 чисел с тире между ними.

Так что мое регулярное выражение возвратит это:

1 => :1-2-35: 
2 => :2-3-1: 
3 => :35-2-11: 
4 => :1-5-2: 

Я попытался это, но безуспешно: :\d*2-|-2-|2-\d*:

Спасибо за вашу помощь.

+0

они всегда одиночные цифры? –

+0

Забыл упомянуть об этом, цифры могут быть бесконечными;) – mimipc

+0

Только 2, я отредактировал свой вопрос. – mimipc

ответ

5

Вы можете попробовать это регулярное выражение

[^:]*(?<=[-:])2(?=[-:])[^:]* 

[^:] средство соответствует любому символу, кроме :

[^:]* будет соответствовать 0 до многих знаков, за исключением :

2(?=[-:]) будет соответствовать 2, только если за ним следуют - или :

(?<=[-:])2 будет соответствовать 2 только она предшествует - или :

ИЛИ

[^:]*\b2\b[^:]* 
+0

Это очень близко к тому, что я ищу, но не могли бы вы рассказать мне, как это работает? Я не привык к скобкам и таким образцам. – mimipc

+0

Это будет много ** любого ** числа, содержащего «2» (например, «20»). – gkalpak

+0

Это не включает: символы в конце – Rinku

0

Если группы всегда будет содержать 3 номер (и 2 черточки), вы можете использовать регулярные выражения, как это:

:(2-\d+-\d+|\d+-2-\d+|\d+-\d+-2)(?=:) 

(Обратите внимание, что она может немного меняться в зависимости от реализации регулярных выражений языка, который вы используете.)

См. Также short demo в PHP.

+0

Это не сработает, если 2 совпадения последовательны –

+0

Что делать ты имеешь в виду ? – gkalpak

+0

: из предыдущего матча будет отсутствовать следующее совпадение. –

0

Вы можете использовать это:

(?<=:)(?:2-\d+-\d+|(?:\d+-){1,2}2\b[^:]*) 
0

Следующая регулярное выражение должно сделать работу

(?<=:)(?:2-\d+-\d+)|(?:\d+-2-\d+)|(?:\d+-\d+-2)(?=:) 

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

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