Проверка строки имеет то же значение в передней половине, что и в задней половине

#regex

#регулярное выражение

Вопрос:

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

Пример данных:

 433315283V005984521
005984521V005984521
  

В идеале регулярное выражение должно соответствовать 2-м данным, но не первым данным. Символ V является демаркатором между двумя сторонами

Я пытался смотреть вперед и смотреть назад, но безуспешно с моими реализациями

 V{1}(?=d{1,})
  

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

Комментарии:

1. вы хотели сопоставить V005984521 ?

2. нет, V это демаркатор. Но @AmalMurali получил шаблон, который мне был нужен.

Ответ №1:

Для достижения этой цели вы можете использовать следующее регулярное выражение:

 ^(.*?)V1$
  

(.*?) Захватывает то, что было раньше V , и сохраняет его в backreference 1 . Если части до V и после V совпадают, совпадение выполнено успешно.

Демонстрационное регулярное выражение 101

Комментарии:

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" };
}