gpt4 book ai didi

regex - 字符串之间匹配真假

转载 作者:行者123 更新时间:2023-12-02 23:50:32 25 4
gpt4 key购买 nike

我正在尝试创建一个与-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

根据文档说:

  • '*' matches 0 or more times
  • '+' matches 1 or more times
  • '?' matches 1 or 0 times
  • '*?' matches 0 or more times, but as few as possible
  • '+?' matches 1 or more times, but as few as possible


因此,我期望 C:\Fruit\kiwi之间的任何内容都将导致 true,但事实并非如此。我们做错了什么?我们只接受true false,因为最后我们将像 regex1|regex2|..这样将这些片段粘合在一起。

最佳答案

您可以通过使用来修复当前代码

$regex = [regex] "(?is)(?<=$string1).+?(?=$string2)"

这里,
  • .+?用于尽可能少地匹配任何1个以上的字符,您需要量化消耗模式,而不是
  • 使用双引号形成字符串文字,以支持字符串插值。另外,请在How to use a variable as part of a regular expression in PowerShell?
  • 中查看更多选项
  • 您应删除\b字边界,因为它们取决于上下文(您可以在以后根据需要添加任何其他限制)。
  • 关于regex - 字符串之间匹配真假,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60433972/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com