匹配ASCII字符,除了字母数字。

7

当我回答这个帖子以匹配除了字母数字外的ASCII字符时,脑海中出现了一个问题。

以下是我尝试过但不正确的内容。

(?=[\x00-\x7F])[^a-zA-Z0-9]

regex101演示

我不是在寻求解决方案,只是想知道我错在哪里。这个正则表达式模式的含义是什么?

谢谢


根据我的理解,(?=[\x00-\x7F]) 用于检查ASCII字符,[^a-zA-Z0-9] 用于排除字母数字字符。因此,它最终将匹配除字母数字以外的任何ASCII字符。我对吗?


3
全球研究中只测试了单个字符,而不是从开头到结尾测试整个字符串,这就是原因。 - Casimir et Hippolyte
单个字符可以吗? - Braj
1
如果您想以相同的方式测试整个字符串,则必须编写\A(?:(?=[\x00-\x7F])[^a-zA-Z0-9]))+\z - Casimir et Hippolyte
那就是唯一的事情。 - Braj
@Unihedron - 仅当您将正则表达式表达为Java字符串文字时才需要转义。他在这里没有这样做...是吗? - Stephen C
显示剩余3条评论
1个回答

1
正则表达式解析器会逐个字符地将字符串与正则表达式进行比较。第一部分(?=...)被称为“前瞻”,它询问下一个字符是否是指定的字符(即[\x00-\x7F]),但不移动字符指针。接下来的部分表示下一个字符不是字母数字字符,但移动字符指针。因此,它会精确地执行您要求的操作,即匹配任何非字母数字ASCII字符。它不会在££££A$££0#$%中匹配£,因为£不是ASCII字符。如果您想匹配任何非字母数字字符,您可能正在寻找这个正则表达式:
`[^a-zA-Z0-9]`

请访问http://www.regular-expressions.info/lookaround.html以获取更多相关信息。


我知道 £ 不是 ASCII 字符,但我的问题是关于匹配除字母数字外的 ASCII 字符。因此,应该匹配除 [a-zA-Z0-9] 以外的任何 ASCII 字符。[^a-zA-Z0-9] 也会匹配我不想匹配的 非 ASCII 字符。 - Braj
我不想匹配任何非字母数字字符。 - Braj
@user3218114...但是你的原始代码现在可以工作了。?_? - oink
我刚在这里回答了同样的问题链接,但我得到了-2票,所以我在这里再次确认它。谢谢你的时间。我不知道为什么人们会没有评论就投反对票? - Braj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接