正则表达式匹配一美元,前面没有反斜杠

Posted

技术标签:

【中文标题】正则表达式匹配一美元,前面没有反斜杠【英文标题】:Regex match a dollar, without a backslash before it 【发布时间】:2016-05-02 11:34:48 【问题描述】:

我只想匹配前面没有反斜杠的美元符号,如下所示:

$not\$yes $  
^.........^

到目前为止,我有 [^\\]\$,但这与任何以行开头的美元都不匹配。美元可能是文档中的第一个符号,因此匹配换行符不起作用。我如何匹配这个?我到目前为止的正则表达式是否正确?

【问题讨论】:

你使用什么语言? javascript (GAS);除了在 gs 中所有的正则表达式都必须被转义之外,这应该无关紧要。 【参考方案1】:

您可以使用an alternation 和^ anchor 来匹配$ 字符,如果它是字符串中的第一个字符或者如果它跟在一个不是反斜杠的字符之后。

/(?:^|[^\\])\$/

说明:

(?: - 用于对交替进行分组的 non-capturing group 的开头。 ^|[^\\] - Alternation 使用 ^ anchor 匹配字符串的开头 匹配非\ 字符 ) - 关闭用于分组 ^|[^\\] 的非捕获组 \$ - $ 字面意思

换句话说,^ 锚点将匹配字符串的开头;而[^\\] 将匹配除反斜杠之外的任何内容。管道| 充当“或”运算符,将匹配字符串的开头或反斜杠以外的任何内容(即^|[^\\])。

所以在您提供的字符串中,第一个/最后一个 $ 字符将被匹配。

【讨论】:

抱歉,您能否更深入地解释一下这是在做什么? @JoeBob 我添加了一个解释。希望这可以清除它。你也可以在这里测试它 -> regex101.com/r/nG8rO1/1【参考方案2】:

使用否定的lookbehind断言

(?<!\\)\$

在行动:https://regex101.com/r/dA8aA1/1

【讨论】:

假设 OP 的语言支持负面的后视......但是是的。

以上是关于正则表达式匹配一美元,前面没有反斜杠的主要内容,如果未能解决你的问题,请参考以下文章

re模块 正则表达式

正则表达式 反斜杠的匹配 2018-11-30

正则表达式[!^0-9] 是啥意思?

正则表达式小点

正则表达式不匹配字符串c#

正则表达式替换文本,除非它前面有反斜杠而不使用后视