2017-01-10 4 views
-1

Я работал с Лексом и столкнулся с проблемой поиска комментариев в программе на C и удаления их в конечном выходе. Для этого мне нужно идентифицировать любое событие */ (так заканчивается традиционный многострочный комментарий!).Что представляет собой регулярное выражение для любого набора символов, отличных от «* /»

Тогда моя проблема сводится к подзадаче принятия любой последовательности символов, кроме */. Я попробовал несколько способов для этого. Я опробовал: [^*\/], и разумно это не сработало. Любая помощь или предложение заметны.

+0

'[^ * \ /] 'не является' * 'или'/'. Использует ли lex PCRE, если это так, я думаю, что '\ * \/(* SKIP) (* FAIL) | .' будет работать .. (также если'/'не является разделителем, его не нужно избегать) – chris85

+0

@ Bishwajit Purkaystha Оформить ссылки Regex101.com. Этот сайт как объяснение правильного слова справа, который будет делать гораздо лучшую работу, объясняя регулярное выражение, тогда я могу. – MattSizzle

ответ

1

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

Regex101

/(?<=\/\*).*(?=\*\/)/s 

Это обеспечит все (предполагая, что строки и модификатор s) между /* и */ захватывается в группе.

Для "Что такое регулярное выражение для любого набора отличных символов„* /“"

Regex101

Это так же просто, как:

/[^\/\*]/ 
+0

Вы, кажется, поменяли взгляд и взгляд. Кстати, это нулевые совпадения, поэтому не нужно в группе захвата - весь матч даст вам то, что требуется: https://regex101.com/r/8Zpmhu/2 –

+0

@Dmitry Egorov Вы правы. Это мой утренний разогрев «кофе». Благодарю. Я обновил свой ответ. – MattSizzle

+0

Эй, @MattSizzle ваше решение сработало.Но не могли бы вы рассказать о том, как вы на самом деле его создали? Я действительно новичок. Благодарю. –

1

Вы должны соответствовать любой последовательности символов, за которой следует буквально */ двухсимвольная последовательность. Позитивный взгляд на это позволит вам достичь этого. Для возможных нескольких */ вхождений вам нужен положительный или начало назад 'текста ((?<=^|\*\/)):

(?<=^|\*\/).*?(?=\*\/) 

Демо: https://regex101.com/r/y88e0T/2

+0

Но это не работает в этом случае. Для случая: 'это */как вы делаете * /' Я хочу найти два сегмента: [это] и [как вы это делаете]. Но ваше решение дает [это */как вы это делаете]. Более того, комментарии могут охватывать многострочные. –

+0

@BishwajitPurkaystha, обновил ответ –

+0

Да, я видел его Не могли бы вы направить меня, где я могу хорошо изучить регулярные выражения? Спасибо за ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^