Java 正则表达式中的元字符
全部 如果我想从.txt文件中读取一个字符,并将搜索边界(仅针对一个char.space)设置为读取“数字2到9或除e以外的小写字符”,以下两个正则表达式之一是否正确Java 正则表达式中的元字符,java,regex,string,parsing,text,Java,Regex,String,Parsing,Text,全部 如果我想从.txt文件中读取一个字符,并将搜索边界(仅针对一个char.space)设置为读取“数字2到9或除e以外的小写字符”,以下两个正则表达式之一是否正确 I. "[/w[2-9][a-z&&[^e]]]" 对 II. "[[2-9][a-z&&[^e]]]" 我倾向于使用第二种方法,但在java.util.regex.Pattern描述中找不到任何说明如何在同一位置同时搜索数字和字符的方法。任何帮助都会很好。谢谢大家!^^ 你会写: [2-9
I. "[/w[2-9][a-z&&[^e]]]"
对
II. "[[2-9][a-z&&[^e]]]"
我倾向于使用第二种方法,但在java.util.regex.Pattern描述中找不到任何说明如何在同一位置同时搜索数字和字符的方法。任何帮助都会很好。谢谢大家!^^ 你会写:
[2-9a-df-z]
(?!e)[2-9a-z]
如果您确实想使用显式的“note
”来编写a-z
,您可以编写:
[2-9a-df-z]
(?!e)[2-9a-z]
但我认为这样做太过分了。试试
[2-9a-df-z]
。这将匹配一个从2
到9
的数字,以及除e
以外的所有小写字符,即从a
到d
,从f
到z
您的第二个正则表达式是正确的,但不需要所有这些括号。这将有助于:
"[2-9a-z&&[^e]]"
这将比@ruakh的建议更有效,(?!e)[2-9a-z]
,后者必须在每个位置执行两次测试。这正是Java开发人员试图用交集操作符&&
解决的问题。此后,Unicode联盟与其他合作伙伴一起支持了这一想法
我不知道你想用第一个正则表达式做什么,但是/
和w
都将被视为文字字符,使其等同于[2-9a-df-z/]
,这听起来不像你想要的
编辑:请不要误解我的意思,效率并不是选择这种方法的唯一原因。这甚至不是最重要的。在正则表达式中和其他任何地方一样邪恶。集中精力使正则表达式尽可能简单明了,不必担心性能问题。我的正则表达式比前向版本更简单(因为它只执行一种操作)也更清晰(可读性更强)(但不是很多;
&&
语法在我看来仍然很糟糕)。太好了,谢谢你的提示!在你提到它之前,我甚至没有考虑过效率……干杯!^ ^很好的观点,谢谢你的链接;信息量大,有帮助!