繁体   English   中英

正则表达式匹配不是我所期望的

[英]regex match is not as i expect

在下面给出的匹配项中:为什么第一个匹配项给出了输出...,而在第二个匹配项中,为什么'-'与目标不匹配?

Index: 01234567890123456789012345678
Target: whois who? Who me? Who else?
Pattern: (^[a-z])|(\?$)
Match: (0,0:w)(28,28:?)

Index: 01234567890
Target: \-^$.?*+()|
Pattern: [\\-^$.?*+()|]
Match: (0,0:\)(2,2:^)(3,3:$)(4,4:.)(5,5:?)(6,6:*)(7,7:+)(8,8:()(9,9:))(10,10:|)

编辑:-

感谢您询问代码

请在此处找到代码: http : //paste.ubuntu.com/11831819/

第一个匹配行/字符串^[az]开头的任何字符,以及行/字符串\\?$末尾的问号,这是因为

  • ^表示行首
  • $表示行尾

在第二个字符中, []表示匹配集合中的字符, -内部表示“之间”,因此匹配其ascii值介于\\ (具有ascii值92)和^ (具有ascii值94)之间的字符,或$。* +()|之一 由于的ASCII值-是46,也不会被显示。

要解决您的问题,您应该引用-

[\\\-^$.?*+()|]

或放在最后

[\\^$.?*+()|-]

当然这是重击,但是:

echo 'begin []\^$.?*+()|- end' | sed -e 's/[][\\^$.?*+()|-]/x/g'
begin xxxxxxxxxxxxx end

我只引用\\ ,所有特殊字符均已替换为x ,因为所有其他字符都放置在正确的位置。 如果我移动-[]我也必须引用它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM