首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式中的元字符

正则表达式中的元字符
EN

Stack Overflow用户
提问于 2012-09-24 07:13:00
回答 3查看 120关注 0票数 1

如果我想从.txt文件中读取一个字符并设置搜索边界(只针对一个字符。空格)来读取“数字2到9或e之外的小写字符”,下面两个正则表达式中的一个是正确的吗?

代码语言:javascript
复制
I. "[/w[2-9][a-z&&[^e]]]"  

对比

代码语言:javascript
复制
II. "[[2-9][a-z&&[^e]]]"

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-24 11:29:52

您的第二个正则表达式是正确的,但是您不需要所有这些括号。这样就可以了:

代码语言:javascript
复制
"[2-9a-z&&[^e]]"

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2012-09-24 07:16:56

你可以这样写:

代码语言:javascript
复制
[2-9a-df-z]

如果你真的想用一个显式的“非e”来编写a-z,你可以这样写:

代码语言:javascript
复制
(?!e)[2-9a-z]

但我认为,对于这个目的来说,这有点过头了。

票数 1
EN

Stack Overflow用户

发布于 2012-09-24 07:16:56

试试[2-9a-df-z]。这将匹配从29的数字,以及除e之外的所有小写字符,即从ad,从fz

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12557081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档