【发布时间】:2022-02-01 19:42:28
【问题描述】:
以下只是模板示例。想要一个通用的正则表达式
此模板充当门户,帮助开发数据库“查询”,然后在 wiki 上运行它,它通过搜索链接实现此目的,该链接也可用于共享此类发现。这个模板也可以用来有“learn”,string“regular”,string“expression”,这个版本Cirrus Search的string语法。
正则表达式 1:
将组捕获到模式字符串。
例如:模式=查询
使用 sed 捕获组直到“查询”和“查询”之后,
[注意:查询后的逗号是可选的,可能存在也可能不存在,因此捕获组 1 应包含最多 query,捕获组 2 应包含 before."]
试过了:
sed 's/^(.*?)"query"(.*)/\1\2/g'
上面的作品。但是捕获组 2 包含我不想要逗号的逗号,并且逗号是可选的,需要像 [,] 一样使用。 以上需要帮助。
正则表达式 2:
在模式之前捕获最多一个单词
的组例如:模式:“常规”
所以, 捕获组 1 应包含“学习”之前的所有文本,捕获组 2 包含所有内容,包括 字符串“表达式”
[意思是:不捕获,字符串“regular”,]
试过了:
sed 's/^(.*?)"\w"[^\"]*"regular"([^"]*)(.*)/\1\3/g' -rE
但不工作。我用“\w”表示我想要的通用正则表达式。
正则表达式 3:关于 sed 中捕获组的查询
有没有办法搜索捕获的组或编辑捕获组本身
例如:sed -r '/(someword)(.*)/s/\1/something/g' 是否有类似或替代的可能
【问题讨论】:
-
Above works.你错过了-r或-E或--regexp-extended参数吗? -
另外关于
Above works-.*?在 BRE 或 ERE 中是未定义的行为,因为它是一个重复字符*(0-or-many),紧接着是另一个重复字符?(0-or-1) 所以 YMMV。 -
关于
-rE--r在旧版本的 GNU sed 中激活 ERE,而-E在新版本的 GNU sed 和 BSD sed 中激活 ERE。两者都用是没有意义的。关于I have used "\w" for generalised regex- 假设您希望\w表示“单词组成字符”,这不是它的一般含义,当一般使用时(即不使用GNU sed),它表示文字字符w。如果您通常(即可移植)想要 POSIX 标准定义的“单词一致字符”,那就是[[:alnum:]_]。
标签: sed