Большинство языков программирования предлагают флаг m
.Это модификатор multiline .Включение этого параметра позволит $
совпадать в конце строк и в конце строки.
Приведенное ниже решение только добавляет $
к вашему текущему регулярному выражению и устанавливает флаг m
.Это может варьироваться в зависимости от вашего языка программирования.
var text = "1.2.\n3.4.5.\n1.2.\n12.34.56.78.123.\nthis 1.2. shouldn't hit",
regex = /((\d+)\.(\d+)\.((\d+)\.)*)$/gm,
match;
while (match = regex.exec(text)) {
console.log(match);
}
Вы можете упростить регулярное выражение до /(\d+\.){2,}$/gm
, а затем разбить полное совпадение на основе символа точки, чтобы получить все различные числа.Ниже приведен пример JavaScript, но получение подстроки и разбиение строки - довольно простые операции в большинстве языков.
var text = "1.2.\n3.4.5.\n1.2.\n12.34.56.78.123.\nthis 1.2. shouldn't hit",
regex = /(\d+\.){2,}$/gm;
/* Slice is used to drop the dot at the end, otherwise resulting in
* an empty string on split.
*
* "1.2.3.".split(".") //=> ["1", "2", "3", ""]
* "1.2.3.".slice(0, -1) //=> "1.2.3"
* "1.2.3".split(".") //=> ["1", "2", "3"]
*/
console.log(
text.match(regex)
.map(match => match.slice(0, -1).split("."))
);
Для получения дополнительной информации о флагах / модификаторах регулярных выражений смотрите: Справочник по регулярным выражениям: Модификаторы режима