diff options
author | Ben Boeckel <ben.boeckel@kitware.com> | 2017-07-18 15:08:10 (GMT) |
---|---|---|
committer | Ben Boeckel <ben.boeckel@kitware.com> | 2017-07-21 13:09:56 (GMT) |
commit | b7941641430feeefadc6f16e2cecf6b50bd9fbe3 (patch) | |
tree | 0cd3337f4b799631752d94f3110c6943cd792ecd /Tests/RunCMake/string/RegexMultiMatchClear.cmake | |
parent | ec049641c46eb788b25713e5d96ff32c89f0e819 (diff) | |
download | CMake-b7941641430feeefadc6f16e2cecf6b50bd9fbe3.zip CMake-b7941641430feeefadc6f16e2cecf6b50bd9fbe3.tar.gz CMake-b7941641430feeefadc6f16e2cecf6b50bd9fbe3.tar.bz2 |
cmStringCommand: clear intermediate matches
When `string(REGEX REPLACE)` or `string(REGEX MATCHALL)` loop
internally, they store their matches, but they do not clear the previous
match from an earlier iteration. This can leave the contents of
`CMAKE_MATCH_<N>` with bogus values for later matches in the string if
they have groups which earlier matched a non-empty string, but now match
an empty string.
Fixes #17079.
Diffstat (limited to 'Tests/RunCMake/string/RegexMultiMatchClear.cmake')
-rw-r--r-- | Tests/RunCMake/string/RegexMultiMatchClear.cmake | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/Tests/RunCMake/string/RegexMultiMatchClear.cmake b/Tests/RunCMake/string/RegexMultiMatchClear.cmake new file mode 100644 index 0000000..80b6b3c --- /dev/null +++ b/Tests/RunCMake/string/RegexMultiMatchClear.cmake @@ -0,0 +1,20 @@ +cmake_minimum_required (VERSION 3.0) +project (RegexClear NONE) + +function (output_results msg) + message("results from: ${msg}") + message("CMAKE_MATCH_0: -->${CMAKE_MATCH_0}<--") + message("CMAKE_MATCH_1: -->${CMAKE_MATCH_1}<--") + message("CMAKE_MATCH_2: -->${CMAKE_MATCH_2}<--") + message("CMAKE_MATCH_COUNT: -->${CMAKE_MATCH_COUNT}<--") +endfunction () + +set(haystack "Some::Scope") + +string(REGEX MATCHALL "^([^:]+)(::)?" matches "${haystack}") +message("matches: ${matches}") +output_results("string(REGEX MATCHALL)") + +string(REGEX REPLACE "^([^:]+)(::)?" "[\\1]" replace "${haystack}") +message("replace: ${replace}") +output_results("string(REGEX REPLACE)") |