gpt4 book ai didi

regex - Escaping Angled Bracket 的行为类似于前瞻

转载 作者:行者123 更新时间:2023-12-01 13:34:45 25 4
gpt4 key购买 nike

为什么转义尖括号 > 会表现出类似前瞻的行为?

需要说明的是,我知道尖括号不需要转义。
问题是,如何解释模式以产生显示的匹配项

## match bracket, with or without underscore
## replace with "greater_"
strings <- c("ten>eight", "ten_>_eight")
repl <- "greater_"

## Unescaped. Yields desired results
gsub(">_?", repl, strings)
# [1] "tengreater_eight" "ten_greater_eight"

## All four of these yield the same result
gsub("\\>_?", repl, strings) # (a)
gsub("\\>(_?)", repl, strings) # (b)
gsub("\\>(_)?", repl, strings) # (c)
gsub("\\>?", repl, strings) # (d)
gsub("\\>", repl, strings) # (e)
# [1] "tengreater_>eightgreater_" "ten_greater_>_eightgreater_"

gregexpr("\\>?", strings)

一些后续问题:

1.  Why do `(a)` and `(d)` yield the same result? 
2. Why is the end-of-string matched?
3. Why do none of `a, b, or c` match the underscore?

最佳答案

\\> 是一个单词边界,匹配单词字符(左侧)和非单词字符(右侧)或行尾 anchor $.

> strings <- c("ten>eight", "ten_>_eight")
> gsub("\\>", "greater_", strings)
[1] "tengreater_>eightgreater_" "ten_greater_>_eightgreater_"

在上面的例子中,它只匹配n之后的单词字符和非单词字符>之间的单词边界,然后是t之间的边界 和行尾锚定在第一个元素中。它匹配 _ (也是一个单词字符)和 > 然后匹配 t 和行尾 anchor (即 $ ) 在第二个元素中。最后,它将匹配的边界替换为您指定的字符串。

一个简单的例子:

> gsub("\\>", "*", "f:r(:")
[1] "f*:r*(:"

考虑下面的输入字符串。 (w表示单词字符,N表示非单词字符)

    f:r(:
w___|||||
|w|N
N |
|
N

所以 \\> 之间匹配,

  • f:
  • r(

示例 2:

> gsub("\\>", "*", "f") 
[1] "f*"

输入字符串:

f$
||----End of the line anchor
w

*替换匹配的边界会得到上面的结果。

关于regex - Escaping Angled Bracket 的行为类似于前瞻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26237735/

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