LINUX.ORG.RU
ФорумAdmin

Вопрос по регулярным выражениям

 


0

2

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

srt url = "http://google.ru"//Какойто комеентарий 
srt url2 = 'http://google.ru' //Какойто комеентарий 
srt url3 = "http://google.ru" //+"/search" //Какойто комеентарий 

Каким регулярным выражением отловить данные случаи? Покачто получилось (\'[^']*\'|\«[^»]*\")?(\/\/.*)? Первая группы ловит строки а вторая ловит какраз комеентарии. Вот только как телперь в sed заменить 2 группу пробелом? Если у вас другой способ решения задачи буду рад.



Последнее исправление: ibahob (всего исправлений: 2)

Ответ на: комментарий от ibahob

Посмотри модули которые занимаются раскраской кода для веба. Тот же highlight.js скажем, который тут используется. Наверняка там можно будет почерпнуть какие-нибудь идеи.

morse ★★★★★
()

C, комментарии в стиле с++(с99), комментарии в комментариях. Охоспате, страдай. Страдай, животнае.

Deleted
()

Задача в общем виде обычной регуляркой не решается.

Tanger ★★★★★
()
Ответ на: комментарий от morse

Идея хорошая, посмотрел, но увы там использовали uglify и все функции заменены на а() и т.д. Раздебажить нереально.

ibahob
() автор топика

DFA можно, или регулярку (несколько) которая будет довольно ограниченной (твоими исходниками). Бо случаи на которые указал morse усложняют обобщение регулярки до такой степени, что даже если её написать, думаю мало кто сделает это на этом форуме jff.

Deleted
()
Ответ на: комментарий от morse

Спасибо за идею. Нашел решение в comment-regex Когда допилю окончательно выложу ответ.

ibahob
() автор топика

посмотри и потести на том же regex101.com

pinachet ★★★★★
()
Ответ на: комментарий от ibahob

Заменяй то что найдено на только первую группу и пробел.

kostik87 ★★★★★
()
Ответ на: комментарий от targitaj

Тут самое главное чтобы отфильтровать // которые могут попастья в строке

ibahob
() автор топика

коде написаном на С
'http://google.ru'

То есть, правило «валидный код на С» не обязательно?

По сабжу: тебе ж просто нужно обрубить строку на моменте встречи //, если оно не находится между кавычек. Нафига регулярка?

Deleted
()
Ответ на: комментарий от Deleted

как определить что \\ не находится между строк?

ibahob
() автор топика

Нужно удалить однострочный коментарий с коде написаном на С

В коде на C
1. есть «окончание» строки. Пусть даже через десять строк но есть.
2. апострофы для строки не могут применяться
3. Парсинг кода на C смотрите исходники того же gcc.

Сферический какой-то пример, явно из пальца придуманный.

anc ★★★★★
()
Ответ на: комментарий от anonymous

Согласен, нюансов понял. Но это я понял уже после написания комментария :)

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.