Одиночная кавычка и обратная цитата в регулярном выражении - PullRequest
1 голос
/ 18 января 2012

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

    data text type string value `this is a string containing a ' single quote`.
    find regex `(\'|%27)` in text.
    if sy-subrc = 0.
      write 'found'.
    endif.

Проблема, с которой я столкнулся, заключается в том, что я не понимаю поведение символа обратной кавычки в регулярных выражениях ABAP. И не могу найти ресурс в Интернете с объяснением того, как он работает. Результаты, которые я получаю с его помощью, довольно странные, в зависимости от того, какая строка TEXT над соответствием работает или не срабатывает.

В PERL вы можете выполнять такие действия, как поиск строковой переменной в строке, например /:

    my $tofind = "'"; //a single quote
    my $text = "this is a string containing a ' single quote";
    if($text=~m/$tofind/){
      print "found";
    }

Может ли этот метод использоваться в ABAP или кто-то может объяснить, как использовать обратные кавычки в ABAP?

Ответы [ 3 ]

4 голосов
/ 19 января 2012

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

data text type string value `this is a string containing a '' single quote`.
    find regex `(''|%27)` in text.
    if sy-subrc = 0.
    write 'found'.
    endif.

Обратите внимание на дополнительные 'как в заданной строке, так и в регулярном выражении.

Редактировать: В ответ на ваш комментарий относительно документации, если вы выполняете F1 (справку) с курсором, расположенным на слове регулярное выражение, вы сможете получить доступ к справке SAP для регулярных выражений. Похоже, большая часть синтаксиса была задокументирована там. (Альтернативно, просто нажмите F1 и найдите регулярное выражение).

1 голос
/ 19 января 2012

Примечание: существуют более простые способы найти один символ.

SEARCH text FOR ''''.
if sy-subrc eq 0.
  WRITE: 'Position:' , SY-FDPOS.
endif.
0 голосов
/ 04 июля 2019

В ABAP обратные кавычки не являются специфичными для регулярных выражений, они используются для определения символьных литералов, напечатанных string (в отличие от типа "C").

Ваш единственный пример кода ABAP работает нормально.

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

Для получения информации о регулярном выражении вашего кода:

  • \ (обратная косая черта) является своего рода символом «unescape»: его следует использовать, когда вы хотите выполнить поисксимвол, который обычно имеет особое значение, например эти символы: .()|{}[] (и т. д.). Поскольку одинарная кавычка ' не является специальным символом, вам не нужно указывать \
  • % (знак процента) не имеет особого значения ни в регулярных выражениях ABAP, ни в текстовых литералах.Я предполагаю, что вы использовали %27, чтобы соответствовать кодовой точке Unicode U + 0027 одинарной кавычки (апостроф AKA), но вместо этого она интерпретируется буквально ABAP, поэтому она будет соответствовать только последовательности трехотдельные символы.
...