Соответствие многострочным комментариям, состоящим из одного или нескольких однострочных комментариев. - PullRequest
2 голосов
/ 16 июня 2019

Мне нужно регулярное выражение, которое будет соответствовать блокам комментариев, состоящим из одного или нескольких однострочных комментариев.

Однострочный комментарий:

# This is a single line comment

Блок комментариев, состоящий из нескольких однострочных комментариев:

# This is a multiple line comment
# which is just a block of single line comments
# that are strung together

Первый символ строки комментария может начинаться с любого из следующих символов: ;#%|*

Я обнаружил следующее регулярное выражение, соответствующее отдельным строкам комментариев: [;#%|*]{1}(.+)

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

Ответы [ 2 ]

1 голос
/ 16 июня 2019

Соответствует началу комментария, остальной части его строки, затем повторяет 0 или более вхождений группы, которая начинается с новой строки, необязательных пробелов, за которыми следует символ начала комментария и остальная часть строки:

[;#%|*].*(?:(?:\r\n|\r|\n) *[;#%|*].*)*

https://regex101.com/r/tpe43D/2

  • [;#%|*] - символ начального комментария
  • .* - остаток первой строки
  • (?:(?:\r\n|\r|\n) *[;#%|*].*)* - повторите 0 или более раз:
    • (?:\r\n|\r|\n) - Новая строка (если вы заранее знаете формат символов новой строки, вы можете упростить это, например, просто до \n)
    • пробел, за которым следует * - 0 или более пробелов
    • [;#%|*] - символ начального комментария
    • .* - остаток строки
0 голосов
/ 16 июня 2019

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

[;#%|*]([\s\S].*?)(?=[\r\n])

DEMO

...