POSIX расширенный Regex — содержит не X, а Y (std :: regex c ++ 11)

Объяснение вопроса

Я пытался написать регулярное выражение, чтобы передать именно этот формат:

"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:]#/].*)( - ).*"

если кто-нибудь знает, как сделать это лучше, пожалуйста, скажите мне.

2

Решение

После того, как я узнал больше о требованиях в комментариях, я пришел с этим RegEx:

^[[:blank:]]*(\/([^\/][^-]*|)|([[:blank:]]|^)[^[:blank:]\/#][^-]*) - .*

Матчи:

введите описание изображения здесь

Кстати, я не знаю, почему на самом деле Боб любит р ** !

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]