У меня есть регулярное выражение, которое анализирует строки в файле драйвера, чтобы извлекать только имена переменных и значения, игнорируя пробелы и комментарии к концам строки, начинающиеся с точки с запятой.Регулярное выражение, похоже, игнорирует символ табуляции.
Это выглядит следующим образом:
"^([^=\s]+)[ ]*=[ ]*([^;\r\n]+)(?<!)"
Большую часть времени он работает просто отлично, как на примере здесь: regex example 1
Однако, когда он встречает линию, которая имеет символ табуляции в любом месте между имя переменной и знак равенства, выражение не работает в соответствии с примером здесь: regex example 2
Я попытался заменить «\ s» на «\ t» и «\ x09», и он все еще не работает. Я редактировал текстовый файл, содержащий символ табуляции с шестнадцатеричным редактором, и подтвердил, что это действительно ASCII «09». Я не хочу использовать положительное совпадение символов, так как переменная может содержать довольно большое количество специальных символов.
Внешний вид буквального «=», кажется, вызывает проблему, но я не могу понять, почему. Например, если я отменил это выражение так: regex example 3
и использовать в нем строку с символом табуляции, она отлично работает. Но как только я добавляю литерал «=» в соответствии с примером здесь: regex example 4, он больше не совпадает, и он игнорирует символ табуляции.
что установил его, но для чего-то другого я пытался "^ ([^ \ S] +) =" в первой части, и он не работает. Я думал, что «^ ([^ \ s] +) =« означает »с начала строки, соответствует всему, что не является пробелом, пока вы не дойдете до буквального« = »? – Lembasts
@Lembasts '^ ([^ \ s] +) =' это не будет работать coz до '=' есть 'space'. Таким образом, нет ничего, чтобы потреблять пространство, поскольку вы отрицали потребление пространства. Поэтому он не будет работать. – vks