Perl RegEX с подчеркиванием и косой чертой - PullRequest
0 голосов
/ 04 сентября 2018

Хотя здесь есть несколько примеров регулярных выражений, показывающих множество вариантов, просто я просто хочу использовать регулярные выражения в Perl для поиска 2 разных строк с одной строкой в ​​качестве подчеркивания (_) и другой строкой в ​​качестве прямого слеша (/) и замены каждая строка с дефисом (-) плюс строка. Я использую обратную косую черту разделителя, однако это неверный вывод.

 Input:          Output:
 _APPLE          -APPLE
 /APPLE          -APPLE

Вот мой код:

          $string1 =~ s/\_\/APPLE/-APPLE
          $string2 =~ s/\/\/APPLE/-APPLE

1 Ответ

0 голосов
/ 04 сентября 2018

Код имеет дополнительный (экранированный) / и будет соответствовать строкам с _/// во втором случае). Это не в ваших данных, которые имеют либо _ или /, но не оба.

Кроме того, нет необходимости экранировать _, а также /, если он не является разделителем.

Чтобы соответствовать любому из нескольких символов, наиболее чистым и эффективным является класс символов

$string =~ s{[_/](\w+)}{-$1};

Чередование также работает здесь

$string =~ s{(?:_|/)(\w+)}{-$1};

, но это больше подходит, когда возможности сопоставления имеют больше символов (word|another).

Здесь довольно много предположений, учитывая, как мало указано в вопросе. Например, \w также соответствует цифрам и _ вместе с буквами. Если вы уточните требования, я отредактирую при необходимости.

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

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