Соответствие регулярному выражению cmake

У меня есть строковая переменная CMake:

set(var "String0 String_1 String_2")

Мне нужно выбрать все, что находится перед первым пробелом из этой переменной ("String0"), и создать новую переменную с этим содержимым.

Для этого я использовал метод CMake REGEX MATCH и это регулярное выражение: '\S\w*'. Я протестировал это регулярное выражение в онлайн-интерпретаторе регулярных выражений, и оно сработало.

Я написал этот код в CMake (конечно, после установки переменной):

string(REGEX MATCH "\S\w*" NEW_VAR "${VAR}")

Когда я это делаю, скрипт жалуется на недопустимый пропуск символов (S и w). Итак, затем я попытался избежать обеих косых черт:

string(REGEX MATCH "\\S\\w*" NEW_VAR "${VAR}")

Теперь NEW_VAR соответствует 'S' вместо "String0", как я ожидал.

Пожалуйста, помогите мне исправить это, так как у меня очень мало опыта работы с регулярными выражениями и CMake.

CMake имеет свой собственныйспецификация регулярного выражения, и в этой спецификации отсутствуют классы символов, такие как \S и \w.

Tsyvarev 10.09.2018 11:44

Спасибо. Я нашел регулярное выражение, которое работает. Не уверен, что это хорошо для всех случаев, но из того, что я тестировал, похоже, работает

Kennedy 10.09.2018 12:48

В Stack Overflow мы, как правило, НЕ отвечаем на вопрос в самом посте с вопросом. Вместо этого вам разрешено ответьте на ваш вопрос. Пожалуйста, переместите последний параграф Edit в ответ.

Tsyvarev 10.09.2018 13:51

сделано. извините это заняло 2 недели

Kennedy 24.09.2018 10:23
1
4
9 254
2

Ответы 2

Вы также можете найти местоположение первого вхождения символа пробела и выбрать подстрока от начала этой строки до этой позиции:

set(var "String_0 String_1 String_2")

string(FIND ${var} " " wsloc)
message(STATUS "position of first whitespace character: ${wsloc}")

string(SUBSTRING ${var} 0 ${wsloc} newvar)
message(STATUS "selected substring: \"${newvar}\"")

спасибо, но я больше не искал что-то меньшее, вроде строки кода: D

Kennedy 10.09.2018 12:49

@ Кеннеди не упоминается в вопросе, но не беспокойтесь. Это всего лишь 2 строки, и в нем нет регулярных выражений, так что в этом может быть какая-то заслуга; не уверен, с какими струнами вы сталкиваетесь.

compor 10.09.2018 13:15

это сработало для некоторых примеров, которые я пробовал в интерпретаторе. должно быть хорошо, спасибо: D

Kennedy 11.09.2018 12:07

Я использовал это, и он работает (не уверен, насколько это хорошо для всех сложных случаев):

. [(A-z) | (a-z) | (0-9)] *

Другие вопросы по теме