首页 > 解决方案 > 正则表达式匹配如果包含 $ 则不起作用

问题描述

以下匹配返回 false。如何更改正则表达式以更正它?

"hello$world" -match '^hello$(wo|ab).*$' 

"hello$abcde" -match '^hello$(wo|ab).*$'

标签: powershell

解决方案


'hello$world' -match '^hello\$(wo|ab).*$'
'hello$abcde' -match '^hello\$(wo|ab).*$'

您需要用单引号引用左侧,因此$world不被视为变量插值。您需要$在右侧转义,因此它不会被视为行尾。

关于报价规则

当您将字符串括在双引号(双引号字符串)中时,以美元符号 ( $) 开头的变量名将替换为变量的值,然后再将字符串传递给命令进行处理。

...

当您将字符串括在单引号中时(单引号字符串),该字符串将完全按照您键入的方式传递给命令。不执行替换。

关于正则表达式

两个常用的锚点是^$。克拉^匹配字符串的开头$,而 匹配字符串的结尾。这使您可以在特定位置匹配文本,同时丢弃不需要的字符。

...

转义字符

反斜杠\用于转义字符,因此它们不会被正则表达式引擎解析。

保留以下字符:[]().\^$|?*+{}.

您需要在您的模式中转义这些字符以在您的输入字符串中匹配它们。


推荐阅读