регулярное выражение для исключения файлов, отличных от golang, не работающих с inotifywait

Ниже приведено регулярное выражение для фильтрации всех файлов non go (т. е. файлов с расширением «.go»).

^([\S]*[^.][^g][^o]|[\S]*.[^g].|[\S]*..[^o]$|[\S]*[^.]..|[\S]{1,2})$

^([^.]*)($|[.]($|[\S]$|g[^o]$|[^g]o$|[^g][^o]$|([\S]+)\.($|.$|g[^o]$|[^g]o$|[^g][^o]$|[^.]{3,}$)|[^.]{3,}$))

Вы можете протестировать их здесь (нажмите «Попробовать» «Перейти» в меню под регулярным выражением)

http://fiddle.re/80kvh6

http://fiddle.re/mhv1h6

Хотя они, кажется, работают правильно в go, но не с фильтром исключения inotifywait (который использует формат posix ERE)

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


person Ashish Gaurav    schedule 27.08.2015    source источник
comment
Попробуйте \.[^.][^o]$|\.[^g][^.]$|\.[^.][^.][^.]+$.   -  person Wiktor Stribiżew    schedule 27.08.2015
comment
@stribizhev: Извини, приятель. Это не будет работать для всех имен без или с расширениями с одним символом, например, main.a или main .   -  person Ashish Gaurav    schedule 27.08.2015
comment
Я не предполагал, что есть расширения с 1 символом, правда, но я добавил это в свой ответ.   -  person Wiktor Stribiżew    schedule 27.08.2015


Ответы (2)


Вы можете использовать

\.[^.][^.][^.]+$|\.[^.][^o]$|\.[^g][^.]$|\.[^.]$

См. демонстрацию.

Или, если вы можете сгруппировать:

\.([^.][^.][^.]+|[^.][^o]|[^g][^.]|[^.])$

См. демонстрацию.

Смотрите объяснение:

  • \. - буквальная точка
  • ([^.][^.][^.]+|[^.][^o]|[^g][^.]|[^.]) - a group of alternatives:
    • [^.][^.][^.]+ - 2 characters other than . and 1 or more characters other than ....
    • [^.][^o] - символ, отличный от точки, и символ, отличный от o...
    • [^g][^.] - символ, отличный от g, и символ, отличный от точки...
    • [^.] - символ, отличный от точки...
  • $ - прямо перед концом строки.
person Wiktor Stribiżew    schedule 27.08.2015

Получил проблему. Кажется, [:graph:] не \S идентификатор класса для символов без пробелов в расширенном posix. Внизу хорошо идти.

^[[:graph:]]*[^.][^g][^o]$|^[[:graph:]]{1,2}$|^[[:graph:]]*.[^g].$|^[[:graph:]]*..[^o]$|^[[:graph:]]*[^.]..$

или еще лучше от стрибижева комментарий [^.][^g][^o]$|^..$|.[^g].$|..[^o]$|[^.]..$

person Ashish Gaurav    schedule 27.08.2015
comment
Хорошо, что вы нашли рабочее решение. Просто обратите внимание, что группировка — это хорошая функция регулярных выражений, которая делает шаблоны регулярных выражений более читабельными и короткими. - person Wiktor Stribiżew; 27.08.2015
comment
да .. если бы я сделал это, мне бы даже не пришлось использовать идентификатор. +1 - person Ashish Gaurav; 27.08.2015