Значение по умолчанию Regex, если не найденный

Я лично люблю/e модификатор к s///операция:

while(<>) {
  s/(\w{0,4})/reverse($1);/e; # reverses all words between 0 and 4 letters
  print;
}

Вход:

This is a test of regular expressions
^D

Вывод (я думаю):

sihT si a tset fo regular expressions
9
задан Zim 23 August 2009 в 17:16
поделиться

3 ответа

Похоже, вам нужен какой-то синтаксис регулярного выражения, который говорит: «Если регулярное выражение не соответствует какой-либо части данной строки, сделайте вид, что оно соответствует следующей подстроке: 'foobar'». Такой возможности нет ни в одном синтаксисе регулярных выражений, который я видел.

Возможно, вам понадобится что-то вроде этого:

matched_string = string.find_regex_match(regex);
if(matched_string == null) {
  string = "default";
}

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

3
ответ дан 3 November 2019 в 07:14
поделиться

Трудно ответить на этот вопрос без специального языка, но, по крайней мере, в Perl работает что-то вроде этого:

$string='hello';
$default = 1234;
($match) = ($string =~ m/(\d+)/ or $default);
print "$match\n";

1234

Не является строго частью регулярного выражения, но позволяет избежать лишнего условного блока.

1
ответ дан 3 November 2019 в 07:14
поделиться

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

Вы можете увидеть сами здесь ].

1
ответ дан 3 November 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: