Tag: 正则表达式

正则表达式的替代(流畅?)接口的设计

我刚刚看到Java的一个巨大的正则表达式让我想到了一般的正则表达式的可维护性。 我相信大多数人 – 除了一些badass perl mongers–会同意正则表达式难以维持。 我在考虑如何解决这种情况。 到目前为止,我最有希望的想法是使用流畅的界面 。 举个例子,而不是: Pattern pattern = Pattern.compile(“a*|b{2,5}”); 一个人可以写这样的东西 import static util.PatternBuilder.* Pattern pattern = string(“a”).anyTimes().or().string(“b”).times(2,5).compile(); Pattern alternative = or( string(“a”).anyTimes(), string(“b”).times(2,5) ) .compile(); 在这个非常简短的例子中,创建正则表达式的常用方法对于任何平庸的有才华的开发人员来说仍然是可读的。 但是,请考虑那些填充两行或多行的怪异表达式,每行包含80个字符。 当然,(冗长的)流畅的界面需要几行而不是两行,但我相信它会更具可读性(因此可维护)。 现在我的问题: 你知道正则表达式的任何类似方法吗? 你是否同意这种方法比使用简单的字符串更好? 你会如何设计API? 你会在你的项目中使用这样一个整洁的实用程序吗? 你认为这会很有趣吗? ;) 编辑:想象一下,可能存在比简单构造更高级别的方法,我们都没有来自正则表达式,例如 // matches aaaab@example.com – think of it as reusable expressions Pattern p = string{“a”).anyTimes().string(“b@”).domain().compile(); […]

如何使用条件拆分字符串

拆分字符串时,如何确定如果分隔符位于两个字符之间,那么它将不会被考虑 ? // Input String string = “a,b,[c,d],e”; String[] split = string.split(“,”); // Output split[0] // “a” split[1] // “b” split[2] // “[c” split[3] // “d]” split[4] // “e” // Required split[0] // “a” split[1] // “b” split[2] // “[c,d]” split[3] // “e”

如何在java中的字符串中使用正则表达式?

嗨,我有一个字符串,我想打破使用正则表达式或任何方法 我的字符串是 1 Agra Achhnera NIL 2 Agra Agra NIL 3 Agra Fatehabad NIL 4 Agra Fatehpur Sikri NIL 5 Aligarh Aligarh 1300.00 6 Aligarh Khair 1300.00 7 Ambedkar Nagar Akbarpur NIL 8 Ambedkar Nagar Tanda Akbarpur 1478.00 结果我想要这样的字符串: – 1 Agra Achhnera NIL 2 Agra Agra NIL 3 Agra Fatehabad NIL 4 Agra FatehpurSikri […]

在String for Java中每60个字符后添加换行符

假设字符串是这样的: String msg = “zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz” 我想通过循环或regEX在每60个字符后添加或附加换行符(回车符)(regEx会更冷)。

Java Regex用于电话号码 – 必须仅包含8位数字且不超过2个短划线

我需要你的帮助。 我必须形成一个只接受8位数字(没有字母)且没有或少于3个破折号的正则表达式。 它应该接受这些例子: 12345678 1234 5678 1234-5678 123-45-678 12-345-678 它不应该接受这些例子: 1234 (less than 8 digits) 123456789 (more than 8 digits) -12345678- !@@#$% 12ABCBDEF (with letters) 12-34-56-78 (more than 3 dashes) 任何帮助表示赞赏。

正则表达式 – 贪心量词

我真的在努力解决这个问题: import java.util.regex.*; class Regex2 { public static void main(String[] args) { Pattern p = Pattern.compile(args[0]); Matcher m = p.matcher(args[1]); boolean b = false; while(b = m.find()) { System.out.print(m.start() + m.group()); } } } 使用以下命令运行上述程序时: java Regex2 “\d*” ab34ef 它输出01234456 。 我真的不明白这个输出。 考虑每个字符的以下索引: ab 3 4 ef ^ ^ ^ ^ ^ ^ 0 1 […]

Java Regex – 在空格上拆分字符串 – 忽略引号中的空格和转义引号

我正在寻找正则表达式在Java中执行以下操作: String originalString = “”; String splitString[] = originalString.spilt(regex); 一些测试用例: Original1: foo bar “simple” Spilt1: { “foo”, “bar”, “\”simple\”” } Original2: foo bar “harder \”case” Spilt2: { “foo”, “bar”, “\”harder \”case\”” } Original3: foo bar “harder case\\” Spilt3: { “foo”, “bar”, “\”harder case\\”” } 我遇到的一些片段: # Does not react to escaped quotes (?=([^\”]*\”[^\”]*\”)*[^\”]*$) # Finds […]

从长度超过N个字符的文本中提取单词 – RegExp / Java / Android

我的第一个要求是使用Java中的正则表达式从一些文本中提取所有单词。 以下代码对我来说非常完美 String[] words = text.split(“[^\\w’]+”); 除了撇号( ‘ )之外,它还会删除所有标点符号和特殊字符 我的下一个任务是提取超过(比方说) 3字符的单词,更重要的是,我想在上面提到的正则表达式中执行此操作。 您可能会想出一些其他可以执行这两项任务的正则表达式。

转义java正则表达式中的特殊字符(不引用)

我正在尝试将用户输入与比java正则表达式语法更简单的通配符匹配。 假设有一个通配符A.然后用户输入输入字符串: this ( is \ a $ test. 并将’test’与搜索字符串匹配: this ( is \ a $ %A%. 我通过用(.+?)替换搜索字符串中的通配符字符串来完成此操作,因此我可以将通配符与普通正则表达式的捕获组进行匹配。 但是,我仍然希望转义特殊字符。 如果我使用引号,正则表达式将不再起作用,因为带有正则表达式( (.+?) )的字符也被引用: String inputString = “this ( is \\ a $ test.” String searchString = “this ( is \\ a $ %A%.” String regex = Pattern.quote(searchString); //regex = “\\Qthis ( is \\ a $ %A%.\\E” […]

正则表达式无法匹配()模式与星号

示例代码: String test = “Z”; Pattern pt = Pattern.compile(“[0-9]*”); Matcher mc = pt.matcher(test); System.out.println(mc.find()); System.out.println(mc.matches()); 据我所知,它应该打印两个真实的。 但是, matches()打印为false。 星号表示零次或多次,为什么matches()产生错误? matches()尝试匹配整个字符串,这对我来说没问题,因为星号给了我零时间。 那么为什么匹配失败?