#regex
#регулярное выражение
Вопрос:
У меня есть ситуация, когда мне нужно найти значение, в котором начальное значение равно последней половине с символом маркера, который разделяет их.
Пример данных:
433315283V005984521
005984521V005984521
В идеале регулярное выражение должно соответствовать 2-м данным, но не первым данным. Символ V
является демаркатором между двумя сторонами
Я пытался смотреть вперед и смотреть назад, но безуспешно с моими реализациями
V{1}(?=d{1,})
Возможно, я делал это неправильно, не говоря уже о том, что я не выполняю много проверки значений с помощью регулярных выражений и использую его больше для проверки данных.
Комментарии:
1. вы хотели сопоставить
V005984521
?2. нет,
V
это демаркатор. Но @AmalMurali получил шаблон, который мне был нужен.
Ответ №1:
Для достижения этой цели вы можете использовать следующее регулярное выражение:
^(.*?)V1$
(.*?)
Захватывает то, что было раньше V
, и сохраняет его в backreference 1
. Если части до V
и после V
совпадают, совпадение выполнено успешно.
Комментарии:
1. Даже не думал о ссылке на группу. Потрясающе, получил именно то, что мне нужно.
Ответ №2:
Используйте Perl:
#!/usr/bin/perl
use strict;
use warnings;
my @strings_to_compare = ( "433315283V005984521",
"005984521V005984521" );
foreach my $compare ( @strings_to_compare ) {
my ( $first_bit, $last_bit ) = split ( "V", $compare );
if ( $first_bit eq $last_bit ) { print "Match: $comparen" };
}