Tag: regex

“\ n”是一个垂直的空格,即“\ v”应该匹配吗?

从逻辑上讲,它是(但无论何时角色编码或区域设置正在运行,逻辑都无关紧要)。 根据 perl -e ‘print “\n” =~ /\v/ ? “y\n” : “n\n”;’ 打印“y”,它是。 根据 Pattern.compile(“\\v”).matcher(“\n”).matches(); 在java中返回false ,它不是。 如果没有这个post声称,这根本不会让我感到困惑 Sun为JDK7更新的Pattern类有一个奇妙的新标志UNICODE_CHARACTER_CLASS,它使一切正常工作。 但是我使用的是java版本“1.7.0_07”并且该标志存在并且似乎根本没有改变。 而且,“\ n”不是Unicode的新手,而是一个普通的旧ASCII字符,所以我真的不知道这种差异是如何发生的。 可能我做了一些愚蠢的事,但我看不到它。

为什么在某些风格的外观工作中没有有限的重复?

我想从dd/mm/yy格式的日期解析中间的2位数字,但也允许日期和月份的单个数字。 这就是我提出的: (?<=^[\d]{1,2}\/)[\d]{1,2} 我想要一个带有1或2位数字的1位或2位数字[\d]{1,2}并在它之前斜线^[\d]{1,2}\/ 。 这不适用于许多组合,我已经测试了10/10/10 / 11/12/13等… 但令我惊讶的是(?<=^\d\d\/)[\d]{1,2}有效。 但是[\d]{1,2}也应该匹配,如果\d\d ,或者我错了?

Java Pattern打印捕获组

((\d{1,2})/(\d{1,2})/(\d{2,4})) 有没有办法使用Pattern对象检索所有捕获组的列表。 我调试了对象,它说的是有多少组(5)。 我需要检索以下捕获组的列表。 输出示例: 0 ((\d{1,2})/(\d{1,2})/(\d{2,4})) 1 (\d{2})/(\d{2})/(\d{4}) 2 \d{2} 3 \d{2} 4 \d{4} 更新: 我不一定要问是否存在正则表达式,但这是最有利的。 到目前为止,我已经创建了一个基本的解析器(我没有检查大多数越界条件),它只匹配最内层的组。 我想知道是否有办法保持对已访问过的括号的引用。 我可能要实现树结构? import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; public class App { public final char S = ‘(‘; public final char E = ‘)’; public final char X = ‘\\’; String errorMessage = “Malformed expression: […]

使用Java regexp匹配(例如)Unicode字母

StackOverflow上有许多问题和答案,假设“字母”可以在[a-zA-Z]的正则表达式中匹配。 然而,对于Unicode,还有更多的字符,大多数人会认为是一个字母(所有的希腊字母,Cyrllic ..还有更多.Unicode定义了许多块,每个块可能有“字母”。 Java定义为像alpha字符这样的东西定义了Posix类 ,但是它被指定为仅使用US-ASCII。 预定义的字符类定义由[a-zA-Z_0-9]组成的单词,它也排除了许多字母。 那么如何正确匹配Unicode字符串呢? 有没有其他图书馆能够做到这一点?

为什么Java和Perl中的正则表达式有不同的表现?

我的理解是Java的正则表达式的实现是基于Perl的。 但是,在下面的示例中,如果我使用相同的字符串执行相同的正则表达式,则Java和Perl会返回不同的结果。 这是Java示例: public class RegexTest { public static void main( String args[] ) { String sentence = “This is a test of regular expressions.”; System.out.println( sentence.matches( “\\w” ) ? “Matches” : “Doesn’t match” ); } } 返回:不匹配 这是Perl的例子: my $sentence = ‘This is a test of regular expressions.’; print ( $sentence =~ /\w/ ? […]

Java Scanner问题

如何将扫描仪的分隔符设置为; 还是新线? 我试过: Scanner.useDelimiter(Pattern.compile(“(\n)|;”)); 但它不起作用。

删除两个字符之间的子字符串(java)

我有一个java字符串,如下所示: String string = “I really want to get rid of the strong-tags!”; 我想删除标签。 我有一些标签更长的其他字符串,所以我想找到一种方法来删除“”字符之间的所有内容,包括那些字符。 一种方法是使用内置字符串方法将字符串与regEx进行比较,但我不知道如何编写它们。

Java 6中对ISO 8601格式的通用支持

Java 7通过字符X (而不是小写或大写Z )在ISO 8601格式的SimpleDateFormat类中引入了支持。 在Java 6中支持这样的格式需要预处理,因此最好的方法是问题。 这种新格式是Z (大写Z)的超集,另外还有两种变体: “分钟”字段是可选的(即,2位而不是4位时区有效) 冒号字符(’:’)可用于将2位“小时”字段与2位“分钟”字段分开。 因此,正如人们可以从SimpleDateFormat的Java 7文档中看到的那样,以下3种格式现在是有效的(而不仅仅是Java 6中由Z覆盖的第二种格式),当然,等效: -08 -0800 -08:00 正如之前关于支持这种“扩展”时区格式的特殊情况所讨论的那样 ,总是以’:’作为分隔符,将Java 7function向后移植到Java 6中的最佳方法是将SimpleDateformat类子类化并覆盖它parse()方法,即: public Date parse(String date, ParsePosition pos) { String iso = … // Replace the X with a Z timezone string, using a regex if (iso.length() == date.length()) { return null; // Not an ISO […]

用于匹配javadoc片段的正则表达式

这个问题让我在正则表达式中思考匹配包含一些指定文本的javadoc注释。 例如,查找包含@deprecated的所有javadoc片段: /** * Method1 * ….. * @deprecated * @return */ 我设法得到表达式/\*\*.*?@deprecated.*?\*/但在某些情况下失败,例如: /** * Method1 * ….. * @return */ public int Method1() { } // this method should be @deprecated public void Method2() { } /** * Method3 * ….. * @return */ public int Method3() { } 它匹配第一个javadoc片段中的所有代码,直到第三个javadoc片段。 有人能给这个正则表达式吗?

找到所有匹配的子串,而不仅仅是“最扩展的”子串

代码 String s = “yzaaabccz”; Pattern p = Pattern.compile(“(a )+(b )+(c *)c”); Matcher m = p.matcher(s); while (m.find()) { System.out.println(m.group()); } 版画 aaabcc 哪个是对的。 但逻辑上,子串 aaabc aabcc aabc abcc abc 也匹配正则表达式。 那么,我怎样才能使代码找到那些子串呢,即不仅是最扩展的子串,还有它的子代码 ?