作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么转义尖括号 >
会表现出类似前瞻的行为?
需要说明的是,我知道尖括号不需要转义。
问题是,如何解释模式以产生显示的匹配项
## 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/
我有一个看起来像这样的字符串: text = "9) 9 的文本\r\n10) 10 的文本\r\n11) 11 的文本\r\n12) ...\r\n123) 123 的文本" 我正在尝试将其拆分如下
下一代的 3D Tiles 前瞻 原文:Introducing 3D Tiles Next, Streaming Geospatial to the Metaverse 原文发布时间:2021年11月
我有一个使用正则表达式回顾的 string.replace() 函数。 myString.replace(/(?
我是一名优秀的程序员,十分优秀!