gpt4 book ai didi

Ruby 扫描标签,除非被 unescaped\

转载 作者:数据小太阳 更新时间:2023-10-29 08:04:50 26 4
gpt4 key购买 nike

考虑字符串:

Hello <name>! I hear you like \<div> tags! Isn't that <adjective>?

我希望能够扫描字符串中出现的 <(.*?)> ,用于变量插值;但我不想被转义(如上面的 \<div>)。

到目前为止,非常简单:使用负面回顾我可以做到:

str.scan(/(?<!\\)<.*?>/)
# => ["<name>", "<adjective>"]

但我想允许转义\字符也是:

# str is: 
# Hello <name>! Do you like escaping \\<thing>? I like \\\<lots> of escapes.
str.scan(re)
# Should give ["<name>", "<thing>"]

我不知道该怎么做。我想过使用负后视来防止奇数个 \ ,但 Ruby 不支持任意长度的回顾。我还想过尝试消耗偶数个 \在 lookbehind 检查单个 \ 之前,像这样:

/(?:\\\\)*(?<!\\)<.*?>/

但看起来 lookbehind 仍然可以“看到”前一组消耗的字符。

如何匹配某些东西,除非它前面有奇数个转义字符?

最佳答案

正则表达式 (?<!\\)(?:\\\\)*保证偶数个反斜杠。

分割:(?:\\\\)恰好匹配 2 个反斜杠。 *使其匹配 0、2、4 等。(?<!\\)确保我们匹配的偶数个反斜杠前面没有另一个反斜杠(这会使数字变为奇数)。

关于Ruby 扫描标签,除非被 unescaped\,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15785184/

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