Perl Regex Соответствует появлению одного двоеточия - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь сопоставить шаблоны регулярных выражений со следующими критериями:

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

Примеры допустимых строк:

JohnP: random text here
BobF::student: random text here (this is valid because there's only ONE occurrence of a single colon. the other is a double colon)
Paris: random text here::student (valid for the same reason as above)

Примеры недопустимых строк:

JohnP: student: random text here
BobF::student: random text here: more

Я понятия не имею, как выполнить такое соответствие регулярному выражению. В случае действительных строк группа, которую я хочу вернуть:

JohnP
BobF::student
Paris

Я был бы признателен за помощь! Я пробовал $string =~ ^[^:]+:\s*, но это соответствует только до первого двоеточия.

Ответы [ 2 ]

4 голосов
/ 18 июня 2020

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

^((?:::|[^:])*+):(?!.*(?<!:):(?!:))

Он ищет некоторое количество пар двоеточий или символов без двоеточия, за которыми следует двоеточие, используя притяжательный квантификатор (*+), чтобы предотвратить совпадение части - через двойное двоеточие в строке, например Bill:: xyz. Эти символы фиксируются в группе 1. Утверждение отрицательного просмотра вперед затем используется для проверки того, что в строке больше нет одиночных двоеточий.

Демонстрация на regex101

0 голосов
/ 18 июня 2020

Возможно, регулярное выражение может быть в форме: совпадать до : без предшествующего : и без :.

Примечание: код написан в сокращенной форме

use strict;
use warnings;
use feature 'say';

my $re = qr/^(.+)(?<!:):(?!:)/;

/$re/ && say $1 for <DATA>;

__DATA__
JohnP: random text here
BobF::student: random text here (this is valid because there's only ONE occurrence of a single colon. the other is a double colon)
Paris: random text here::student (valid for the same reason as above)

Выход

JohnP
BobF::student
Paris
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...