Этот формат регулярного выражения (регулярное выражение) в основном:
/matchthis/replacewiththis/settings
Установка «g» в конце означает глобальную замену, а не просто ограничение регулярного выражения определенной строкой или выделением.
Разбиваем дальше ...
[[:alpha:]]+|( )
Соответствует буквенно-цифровому символу (содержится в параметре $0
) или, необязательно, пробелу (содержится в параметре $1
).
(?1::$0)
Как говорит Роджер, ?
указывает, что эта часть является условной. Если в параметре $1
найдено совпадение, то оно заменяется содержимым между двоеточиями ::
- в этом случае ничего. Если в $1
ничего нет, то совпадение заменяется содержимым $0
, т. Е. Любой буквенно-цифровой символ, не являющийся пробелом, выводится без изменений.
Это объясняет, почему пробелы удаляются в первом примере, а пробелы заменяются подчеркиваниями во втором примере.
Во втором выражении \L
используется в нижнем регистре текста.
Дополнительный вопрос в комментарии был о том, как запустить это выражение вне TextMate. Используя vi
в качестве примера, я бы разбил его на несколько шагов:
:0,$s/ //g
:0,$s/\u/\L\0/g
Первая часть вышеприведенных команд указывает vi запускать замену s
, начинающуюся со строки 0
и заканчивающуюся концом файла (это означает $
).
В остальной части выражения используются те же правила, что описаны выше, хотя некоторые обозначения в vi немного нестандартные - см. Эту справочную веб-страницу .