gpt4 book ai didi

java - 正则表达式中的元字符

转载 作者:行者123 更新时间:2023-11-29 05:54:56 26 4
gpt4 key购买 nike

全部

如果我想从 .txt 文件中读取一个字符并将搜索边界(仅一个字符空间)设置为读取“数字 2 到 9 或除 e 之外的小写字符”,其中一个是以下两个正则表达式是正确的方法吗?

I. "[/w[2-9][a-z&&[^e]]]"  

对比

II. "[[2-9][a-z&&[^e]]]"

我倾向于第二个,但我在 java.util.regex.Pattern 描述中找不到任何显示如何同时搜索同一位置的数字和字符的内容。任何帮助都会很棒。谢谢你! ^^

最佳答案

您的第二个正则表达式是正确的,但您不需要所有这些括号。这将做到:

"[2-9a-z&&[^e]]"

这将比@ruakh 的建议(?!e)[2-9a-z] 更有效,后者必须在每个位置执行两次测试。这正是 Java 开发人员试图用交集运算符 && 解决的问题。 Unicode 联盟已经认可了这个想法,以及其他 set operations .

我不知道你用第一个正则表达式尝试的是什么,但是 /w 都将被视为文字字符,使其等同于 [2-9a-df-z/],这听起来不像你想要的。


编辑不过请不要误会我的意思,效率并不是首选这种方法的唯一原因。它甚至不是最重要的。 Premature optimization在正则表达式中和在其他任何地方一样邪恶。专注于让您的正则表达式尽可能简单明了,您不必担心性能问题。我的正则表达式比 lookahead 版本更简单(因为它只执行一种 kind 操作)和更清晰(更具可读性)(但不是很多; && 语法仍然我觉得很丑)。

关于java - 正则表达式中的元字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12557081/

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