全
如果我想从.txt文件中读取一个字符并设置搜索边界(只针对一个字符。空格)来读取“数字2到9或e之外的小写字符”,下面两个正则表达式中的一个是正确的吗?
I. "[/w[2-9][a-z&&[^e]]]" 对比
II. "[[2-9][a-z&&[^e]]]"我倾向于第二个,但我在java.util.regex.Pattern描述中找不到任何显示如何同时搜索同一位置的数字和字符的内容。任何帮助都是最好的。谢谢!^^
发布于 2012-09-24 11:29:52
您的第二个正则表达式是正确的,但是您不需要所有这些括号。这样就可以了:
"[2-9a-z&&[^e]]"这将比@ruakh的建议(?!e)[2-9a-z]更有效,后者必须在每个位置执行两个测试。这正是Java开发人员试图用交叉运算符&&解决的问题。自那以后,统一码联盟和其他set operations一起认可了这个想法。
我不知道您使用第一个正则表达式的目的是什么,但是/和w都将被视为文字字符,使其等同于[2-9a-df-z/],这听起来并不像您想要的。
编辑:别误会我的意思,效率并不是首选这种方法的唯一原因。它甚至不是最重要的。Premature optimization在正则表达式中和在其他任何地方一样邪恶。专注于保持您的正则表达式尽可能简单和清晰,这样您就不必担心性能问题。我的正则表达式比先行版本更简单(因为它只执行一种操作),也更清晰(更具可读性)(但不是很多;在我看来,&&语法仍然很可怕)。
发布于 2012-09-24 07:16:56
你可以这样写:
[2-9a-df-z]如果你真的想用一个显式的“非e”来编写a-z,你可以这样写:
(?!e)[2-9a-z]但我认为,对于这个目的来说,这有点过头了。
发布于 2012-09-24 07:16:56
试试[2-9a-df-z]。这将匹配从2到9的数字,以及除e之外的所有小写字符,即从a到d,从f到z。
https://stackoverflow.com/questions/12557081
复制相似问题