Следующее регулярное выражение работает, но может ли кто-нибудь объяснить, как? Любые комментарии приветствуются! Спасибо! Лебеда

Что такое регулярное выражение "|" что делать, чтобы удалить теги "" и "" из <script>Keep THIS</Script>, чтобы получить "Keep THIS" в памяти $ 1?

Вот РЕГЕКС:

(?x)
([\w\.!?,\s-])|<.*?>|.

Вот строка:

 <script>Keep THIS</Script>

Результаты: $ 1 = "Оставить ЭТО"

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

  (?x)                     set flags for this block (disregarding
                           whitespace and comments) (case-sensitive)
                           (with ^ and $ matching normally) (with .
                           not matching \n)

  (                        group and capture to \1:
    [\w\.!?,\s-]             any character of: word characters (a-z,
                             A-Z, 0-9, _), '\.', '!', '?', ',',
                             whitespace (\n, \r, \t, \f, and " "), '-
                             '
  )                        end of \1
 |                        OR
  <                        '<'
  .?                       any character except \n (optional
                           (matching the most amount possible))
  >                        '>'
 |                        OR
  .                        any character except \n
-1
quinoa 3 Мар 2015 в 03:57

1 ответ

Лучший ответ

<.*?> соответствует всем тегам, то есть соответствует всем строкам, которые начинаются с < и заканчиваются >. Затем из оставшейся строки это регулярное выражение ([\w\.!?,\s-]) захватит все символы слова или точки, или !, или ?, или пробел, или запятую, или дефис. Обратите внимание, что он захватит каждый отдельный символ в группу 1.

Если вы хотите захватить всю строку Keep THIS в группу 1, вам нужно добавить квантификатор + рядом с классом символов. + повторяет предыдущий токен один или несколько раз.

([\w\.!?,\s-]+)|<.*?>|.

Наконец, . соответствует всем остальным символам, которые не совпадают.

ДЕМО

1
Avinash Raj 3 Мар 2015 в 01:18