正则表达式是否可以在包裹在 ' ' 中时转义 ' 字符?
RegEx is it possible to escape the ' character when wrapped in ' '?
我有一个 PS 配置文件,我想与其他一些用户共享,理想情况下它会在加载时自动将他们发送到他们的主目录。但是,我注意到用户喜欢更改 home 变量的名称以适应他们的喜好(这很公平)。
因此,我在配置文件的末尾添加了一个 RegEx 模式,该模式选择此配置文件行并提取为该变量定义的路径,而不管变量名称如何。它看起来像这样:
$profileHome = gc $PSCommandPath
If ($profileHome[7] -notMatch '\s*#+ *$' -and $profileHome[7] -match '$\w+\s*=\s*['"]?[A-Z]:[\/]\w+' ) {...}
这样我就可以强制将它们发送到他们的目录,无论变量名称如何,如果该变量设置为合理的路径。
不幸的是,我已经在命令行上测试了 RegEx,除 ['"] 模式外一切正常,我似乎无法逃避。
我知道 ,但遗憾的是我无法使用它的解决方案。我尝试了各种替代方案:
[`'"]
[\`'"]
[\[char\]0x27"]
[[char]0x27"]
还有一些其他变体看起来太傻了,无法在此处输入。
这可以通过以下方式进行测试:
PS>"`$home = 'C:/users'`r`ntest" > test.ps1
PS>$test = gc test.ps1
PS>If ($test[0] -match '$\w+\s*=\s*.?[A-Z]:[\/]\w+' ) {echo 'hello'}
PS>hello
PS>If ($test[0] -match '$\w+\s*=\s*[`'"]?[A-Z]:[\/]\w+' ) {echo 'hello'}
#This command is line wrapped into:
PS>If ($test[0] -match '$\w+\s*=\s*[`'
>> "]?[A-Z]:[\/]\w+' ) {echo 'hello'}
在上面成功的 echo 中,我将 ' 替换为 .接受任何字符。在第二次尝试中,我将 ' 留在了里面,但我无法逃脱它。经过一些测试,我注意到可以通过将语句用双引号“”括起来并使用 ['`"] 来实现,其中显然 `" 已正确转义。这是一个合理的解决方法,但我仍然很好奇这是否是唯一的方法。
问题:是否无法转义包含在 ' ' 中的 RegEx 的 ' 字符?
PS(5.1.19041)
在正则表达式中引用和使用 '
的一些示例:
# All of these should match and return True
$single_quote = "'"
$single_quote -match "'" # using double quote
$single_quote -match '''' # doubling single quote
$single_quote -match @"
'
"@ # double-quoted here-string
$single_quote -match @'
'
'@ # single-quoted here-string
$single_quote -match '\x27' # using character code
我有一个 PS 配置文件,我想与其他一些用户共享,理想情况下它会在加载时自动将他们发送到他们的主目录。但是,我注意到用户喜欢更改 home 变量的名称以适应他们的喜好(这很公平)。
因此,我在配置文件的末尾添加了一个 RegEx 模式,该模式选择此配置文件行并提取为该变量定义的路径,而不管变量名称如何。它看起来像这样:
$profileHome = gc $PSCommandPath
If ($profileHome[7] -notMatch '\s*#+ *$' -and $profileHome[7] -match '$\w+\s*=\s*['"]?[A-Z]:[\/]\w+' ) {...}
这样我就可以强制将它们发送到他们的目录,无论变量名称如何,如果该变量设置为合理的路径。
不幸的是,我已经在命令行上测试了 RegEx,除 ['"] 模式外一切正常,我似乎无法逃避。
我知道
[`'"]
[\`'"]
[\[char\]0x27"]
[[char]0x27"]
还有一些其他变体看起来太傻了,无法在此处输入。
这可以通过以下方式进行测试:
PS>"`$home = 'C:/users'`r`ntest" > test.ps1
PS>$test = gc test.ps1
PS>If ($test[0] -match '$\w+\s*=\s*.?[A-Z]:[\/]\w+' ) {echo 'hello'}
PS>hello
PS>If ($test[0] -match '$\w+\s*=\s*[`'"]?[A-Z]:[\/]\w+' ) {echo 'hello'}
#This command is line wrapped into:
PS>If ($test[0] -match '$\w+\s*=\s*[`'
>> "]?[A-Z]:[\/]\w+' ) {echo 'hello'}
在上面成功的 echo 中,我将 ' 替换为 .接受任何字符。在第二次尝试中,我将 ' 留在了里面,但我无法逃脱它。经过一些测试,我注意到可以通过将语句用双引号“”括起来并使用 ['`"] 来实现,其中显然 `" 已正确转义。这是一个合理的解决方法,但我仍然很好奇这是否是唯一的方法。
问题:是否无法转义包含在 ' ' 中的 RegEx 的 ' 字符?
PS(5.1.19041)
在正则表达式中引用和使用 '
的一些示例:
# All of these should match and return True
$single_quote = "'"
$single_quote -match "'" # using double quote
$single_quote -match '''' # doubling single quote
$single_quote -match @"
'
"@ # double-quoted here-string
$single_quote -match @'
'
'@ # single-quoted here-string
$single_quote -match '\x27' # using character code