
[英]Escape character to escape “.” when Editing an XML file with powershell
[英]RegEx is it possible to escape the ' character when wrapped in ' '?
我有一个 PS 配置文件,我想与其他一些用户共享,理想情况下,它会在加载时自动将它们发送到他们的主目录。 但是,我注意到用户喜欢更改 home 变量的名称以适应他们的喜好(很公平)。
因此,我在 Profile 的末尾添加了一个 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'}
在上面的成功回显中,我将 ' 替换为 a。 接受任何字符。 在第二次尝试中,我把 ' 留在里面,我无法逃脱它。 经过一些测试,我注意到可以通过将语句括在双引号“”中并使用 ['`"],显然 `" 被正确转义。 这是一个合理的解决方法,但我仍然很好奇这是否是唯一的方法。
问题:是否无法转义包含在 ' ' 中的 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.