cmake_policy(SET CMP0186 NEW) function(check_output name expected) set(output "${${name}}") if(NOT output STREQUAL expected) message(FATAL_ERROR "\"string(REGEX)\" set ${name} to \"${output}\", expected \"${expected}\"") endif() endfunction() # Zero-length matches in REGEX MATCH string(REGEX MATCH "" out "") check_output(out "") string(REGEX MATCH "" out "a") check_output(out "") string(REGEX MATCH "a*" out "") check_output(out "") string(REGEX MATCH "a*" out "a") check_output(out "a") string(REGEX MATCH "a*" out "b") check_output(out "") string(REGEX MATCH "a*" out "ba") check_output(out "") # Zero-length matches in REGEX MATCHALL string(REGEX MATCHALL "" out "") check_output(out "") string(REGEX MATCHALL "" out "ab") check_output(out ";;") string(REGEX MATCHALL "^" out "ab") check_output(out "") string(REGEX MATCHALL "(^|,)" out "a,b") check_output(out ";,") string(REGEX MATCHALL "(,|^)" out "a,b") check_output(out ";,") string(REGEX MATCHALL "(^|)" out "") check_output(out "") string(REGEX MATCHALL "(^|)" out "ab") check_output(out ";;") string(REGEX MATCHALL "a|^" out "ab") check_output(out "a") string(REGEX MATCHALL "$" out "ab") check_output(out "") string(REGEX MATCHALL "($|,)" out "a,b") check_output(out ",;") string(REGEX MATCHALL "(,|$)" out "a,b") check_output(out ",;") string(REGEX MATCHALL "(|$)" out "") check_output(out "") string(REGEX MATCHALL "(|$)" out "ab") check_output(out ";;") string(REGEX MATCHALL "(b|)" out "abc") check_output(out ";b;;") string(REGEX MATCHALL "(|b)" out "abc") check_output(out ";;b;;") string(REGEX MATCHALL "a*" out "aaa") check_output(out "aaa;") string(REGEX MATCHALL "(a)?(b)?" out "") check_output(out "") string(REGEX MATCHALL "(a)?(b)?" out "abba") check_output(out "ab;b;a;") # Zero-length matches in REGEX REPLACE string(REGEX REPLACE "" "" out "") check_output(out "") string(REGEX REPLACE "" "x" out "") check_output(out "x") string(REGEX REPLACE "" "x" out "ab") check_output(out "xaxbx") string(REGEX REPLACE "^" "x" out "ab") check_output(out "xab") string(REGEX REPLACE "(^|,)" "x" out "a,b") check_output(out "xaxb") string(REGEX REPLACE "(,|^)" "x" out "a,b") check_output(out "xaxb") string(REGEX REPLACE "(^|)" "x" out "") check_output(out "x") string(REGEX REPLACE "(^|)" "x" out "ab") check_output(out "xaxbx") string(REGEX REPLACE "a|^" "x" out "ab") check_output(out "xb") string(REGEX REPLACE "$" "x" out "ab") check_output(out "abx") string(REGEX REPLACE "($|,)" "x" out "a,b") check_output(out "axbx") string(REGEX REPLACE "(,|$)" "x" out "a,b") check_output(out "axbx") string(REGEX REPLACE "(|$)" "x" out "") check_output(out "x") string(REGEX REPLACE "(|$)" "x" out "ab") check_output(out "xaxbx") string(REGEX REPLACE "(b|)" "x" out "abc") check_output(out "xaxxcx") string(REGEX REPLACE "(|b)" "x" out "abc") check_output(out "xaxxxcx") string(REGEX REPLACE "a*" "x" out "aaa") check_output(out "xx") string(REGEX REPLACE "(a)?(b)?" "x" out "") check_output(out "x") string(REGEX REPLACE "(a)?(b)?" "x" out "abba") check_output(out "xxxx")