Я пытаюсь создать регулярное выражение, которое работает с оператором -match
. Следующее уже работает:
# Exact match
$string1 = [Regex]::Escape('C:\Fruit\kiwi')
$regex = [regex] '^{0}$' -f $string1
'C:\Fruit\kiwi' -match $regex
# Match where trail is allowed ( -like 'c:\folder*')
$string1 = [Regex]::Escape('C:\Fruit\kiwi')
$regex = [regex] '^{0}' -f $string1
'C:\Fruit\kiwi\other folder' -match $regex
Теперь мы пытаемся найти совпадение, когда между двумя строками есть что-то, но это не получается:
# Match in between strings
$string1 = [Regex]::Escape("C:\Fruit")
$string2 = [Regex]::Escape("\kiwi")
$regex = [regex] '(?is)(?<=\b{0}\b)+?(?=\b{1}\b)' -f $string1, $string2
'C:\Fruit\d\kiwi' -match $regex
Согласно документам, в которых говорится :
- '*' соответствует 0 или более раз
- '+' соответствует 1 или более раз
- '?' соответствует 1 или 0 раз
- '*?' соответствует 0 или более раз, но как можно меньше
- '+?' соответствует 1 или более раз, но как можно меньше
Так что я ожидал, что что-нибудь между C:\Fruit
и \kiwi
приведет к true
, но это не так. Что мы делаем не так? Мы только после истинного ложного, потому что в конце мы склеим эти кусочки вместе, как regex1|regex2|..
.