Объяснение вопроса
Я пытался написать регулярное выражение, чтобы передать именно этот формат:
"bob likes poo - whatever(&T(R)*HP#"" \t \t bob likes poo - *^RFVOG(IBHUO)B"
но терпеть неудачу на:
"//bob likes poo - GV*(GF*(""# \t bob likes poo - OHG(G(*""bob does not like poo G&((HOUIHBO:"
Они имеют ключевое значение.
Строка НЕ начинается с символов комментария (# или //), может иметь
пробелы (пробел или табуляция), должен иметь что-то, сопровождаемое
делиметр («-«), затем все что угодно.
Угловые чехлы:
1) " \t //this is still a comment - YGV^FV*"
все равно должен потерпеть неудачу.
2) " /i_am//_no_/comment - FG&*G*&G"
должен пройти.
Случайное рассуждение
хорошо, я потерпел неудачу. что заставило меня спросить, можем ли мы указать как-то содержать какой-то символ, но не другие например
[^abc]
просто означает любой символ, который не является a, b или c. но как бы мы сказали не abc, а 123? мы не можем просто поставить
[^abc123]
потому что это исключит их и не может сделать
[^abc]123
потому что это будет означать, что у него должно быть 123 после некоторого символа, который не является a, b, c, что составляет всего 4 символа вместо 1, который мы хотим. Я понятия не имею, возможно ли это вообще. Таким образом, в некотором смысле здесь есть два вопроса.
моя лучшая ставка на данный момент:
"[[:blank:]]*[^[:blank:]]+( - ).*"
это делает соответствие формата правильным, но не учитывает комментарии.
РЕДАКТИРОВАТЬ
Я нашел рабочее решение. Это работает, но это ужасно, черт возьми:
"[[:blank:]]*([^[:blank:]#]([^/].*)?|[^[:blank:]#/].*)( - ).*"
если кто-нибудь знает, как сделать это лучше, пожалуйста, скажите мне.
После того, как я узнал больше о требованиях в комментариях, я пришел с этим RegEx:
^[[:blank:]]*(\/([^\/][^-]*|)|([[:blank:]]|^)[^[:blank:]\/#][^-]*) - .*
Матчи:
Кстати, я не знаю, почему на самом деле Боб любит р ** !
Других решений пока нет …