Tag: 正则表达式

Java正则表达式提供任何性能优势?

在Java中,当我们尝试使用正则表达式进行模式匹配时。 例如,获取输入字符串并使用正则表达式来确定它是否为数字。 如果没有,抛出exception。 在这种情况下,我理解,使用正则表达式使代码更简洁,而不是我们采取字符串的每个字符,检查它是否是一个数字,如果不是抛出exception。 但我假设正则表达式也使这​​个过程更有效率。 这是真的? 我在这一点上找不到任何证据。 正则表达式如何在幕后进行比赛? 它是不是也迭代字符串并逐个检查每个字符?

Java正则表达式匹配花括号 – “无效的转义序列”

我想通过{}递归地将它们拆分来解析嵌套的JSON字符串。 我想出的正则表达式是“{([^}] *。?)}”,我已经测试过适当的抓取我想要的字符串。 但是,当我尝试将其包含在我的Java中时,我收到以下错误:“无效的转义序列(有效的转义序列是\ b \ t \ n \ f \ r \”\’\) 这是我的代码,以及发生错误的地方: String[] strArr = jsonText.split(“\{([^}]*.?)\}”); 我究竟做错了什么?

正则表达式查找具有唯一数字的数字

我想找到没有重复数字的10位数字,例如: 1123456789 //fail, there are two 1’s 6758951230 //fail, there are two 5’s 6789012345 //pass, each digit occurs once only. 目前我正在使用正则表达式,但只能匹配10个数字(它不会检查重复。我正在使用这个正则表达式: [0-9]{10} 这可以用正则表达式完成还是有更好的方法来实现这一目标?

为什么我必须在Java正则表达式中指定整个字符串?

假设,我有一个字符串: String str = “some strange string with searched symbol”; 我想在其中搜索一些符号,假设它将是”string” 。 所以我们有以下内容: str.matches(“string”); //false str.matches(“.*string.*”); //true 那么,正如标题中所述, 为什么我必须在Java正则表达式中指定整个字符串? Java文档说: public boolean matches(String regex) 判断此字符串是否与给定的正则表达式匹配。 它没有说 判断整个字符串是否与给定的正则表达式匹配。 例如,在php它将是: $str = “some strange string with searched symbol”; var_dump(preg_match(‘/string/’, $str)); // int(1) var_dump(preg_match(‘/.*string.*/’, $str)); //int(1) 所以,两个正则表达式都是true 。 而且我认为这是正确的,因为如果我想测试整个字符串,我会做str.matches(“^string$”); PS:是的,我知道这是搜索子字符串 ,更简单,更快将使用str.indexOf(“string”)或str.contains(“string”) 。 我的问题只涉及Java正则表达式。 更新 :如@ ChrisJester-Young(和@GyroGearless)所述,其中一个解决方案,如果你想搜索属于主题字符串的regex ,就是使用这样的find()方法: String […]

用字符串中的空字符替换所有非数字

public static String removeNonDigits(final String str) { if (str == null || str.length() == 0) { return “”; } return str.replaceAll(“/[^0-9]/g”, “”); } 这应该只获得数字并返回但不按预期执行! 有什么建议么?

用(\\?)替换问号(?)

我试图定义一个模式来匹配文本与其中的问号(?)。 在正则表达式中,问号被认为是“一次或根本没有”。 那么我可以用(\\?)替换我的文本中的(?)符号来修复模式问题吗? String text = “aaa aspx?pubid=222 zzz”; Pattern p = Pattern.compile( “aspx?pubid=222” ); Matcher m = p.matcher( text ); if ( m.find() ) System.out.print( “Found it.” ); else System.out.print( “Didn’t find it.” ); // Always prints.

为什么这个正则表达式会杀死Java正则表达式引擎?

我有这个天真的正则表达式“<([\ s] | [^ ”(不包括引号)。 它看起来很简单,但它对下面的HTML文本起作用时确实是邪恶的。 它将Java正则表达式引擎发送到无限循环。 我有另一个正则表达式(“”),这有点相同,但它不会杀死任何东西。 你知道为什么会这样吗? var numDivs, layerName; layerName = “lnavLayer”; catLinkName = “category”; numDivs = 2; function toggleLayer(layerID){ if (!(navigator.appName == “Netscape” && navigator.appVersion.substr(0, 1) < 5)){ thisLayer = document.getElementById(layerName + layerID); categoryLink = document.getElementById(catLinkName + layerID); closeThem(); if (thisLayer.className == 'subnavDefault'){ thisLayer.className = 'subnavToggled'; categoryLink.className = 'leftnavLinkSelectedSection'; } } […]

String.matches()的DOTALL

我知道DOTALL可用于完全成熟的Pattern + Matcher类。 但是,如果我只想使用String.matches() ,有没有办法告诉它使用DOTALL修饰符?

禁用特定Java包的所有checkstyle检查

我有两个包 COM / MYDOMAIN / ABC /代表/ XYZ / JAXWS /管理 和com/mydomain/abc/xyz/jaxws/managed 我要求仅为第二个包禁用checkstyle,因为它们包含自动生成的代理类。 我使用了抑制文件夹,如下所示 请注意,禁用JavadocPackage检查的第一个禁止工作正常,但第二个禁止。 我担心我选择包的正则表达可能是错误的。 任何帮助深表感谢。 用一个例子说明我的要求: 选择的标准是包名称应以jaxws.managed结尾,但不应包含包名称中的delegate 。 更多jaxws.managed应该在包名称中的jaxws.managed之前jaxws.managed : 例如:必须启用com.mycomany.delegate.service.jaxws.managed包中的checktyle检查,同时必须禁用com.mycomany.delegate.service.jaxws.managed checktyle检查,并且要注意我不知道所有的除了这种模式之外,pakages预先提名。 谢谢,并问候Sibi

java Matcher中的偶发堆栈溢出错误

我有一些文件解析器代码,我偶尔会在m.matches()上获得堆栈溢出错误(其中m是匹配器)。 我再次运行我的应用程序,它解析相同的文件,没有堆栈溢出。 这是真的我的模式有点复杂。 它基本上是一堆可选的零长度正向前瞻,其中包含命名组,因此我可以匹配一堆变量名称/值对,而不管它们的顺序如何。 但我希望如果某些字符串会导致堆栈溢出错误,那么它总是会导致它……不仅仅是有时……任何想法? 我的Pattern “prefix(?=\\s+user=(?\\S+))?(?=\\s+repo=(?\\S+))?.*?”简化版本”prefix(?=\\s+user=(?\\S+))?(?=\\s+repo=(?\\S+))?.*?” 完全正则表达式是…… app=github(?=(?:[^”]|”[^”]*”)*\s+user=(?\S+))?(?=(?:[^”]|”[^”]*”)*\s+repo=(?\S+))?(?=(?:[^”]|”[^”]*”)*\s+remote_address=(?\S+))?(?=(?:[^”]|”[^”]*”)*\s+now=”(?\S+)\+\d\d:\d\d”)?(?=(?:[^”]|”[^”]*”)*\s+url=”(?\S+)”)?(?=(?:[^”]|”[^”]*”)*\s+referer=”(?\S+)”)?(?=(?:[^”]|”[^”]*”)*\s+status=(?\S+))?(?=(?:[^”]|”[^”]*”)*\s+elapsed=(?\S+))?(?=(?:[^”]|”[^”]*”)*\s+request_method=(?\S+))?(?=(?:[^”]|”[^”]*”)*\s+created_at=”(?\S+)(?:-|\+)\d\d:\d\d”)?(?=(?:[^”]|”[^”]*”)*\s+pull_request_id=(?\d+))?(?=(?:[^”]|”[^”]*”)*\s+at=(?\S+))?(?=(?:[^”]|”[^”]*”)*\s+fn=(?\S+))?(?=(?:[^”]|”[^”]*”)*\s+method=(?\S+))?(?=(?:[^”]|”[^”]*”)*\s+current_user=(?\S+))?(?=(?:[^”]|”[^”]*”)*\s+content_length=(?\S+))?(?=(?:[^”]|”[^”]*”)*\s+request_category=(?\S+))?(?=(?:[^”]|”[^”]*”)*\s+controller=(?\S+))?(?=(?:[^”]|”[^”]*”)*\s+action=(?\S+))?.*? 栈顶溢出错误堆栈…(大约9800行) Exception: java.lang.StackOverflowError at java.util.regex.Pattern$BranchConn.match(Pattern.java:4480) at java.util.regex.Pattern$CharProperty.match(Pattern.java:3706) at java.util.regex.Pattern$Branch.match(Pattern.java:4516) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4570) at java.util.regex.Pattern$Loop.match(Pattern.java:4697) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4629) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4480) at java.util.regex.Pattern$CharProperty.match(Pattern.java:3706) at java.util.regex.Pattern$Branch.match(Pattern.java:4516) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4570) at java.util.regex.Pattern$Loop.match(Pattern.java:4697) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4629) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4480) at java.util.regex.Pattern$CharProperty.match(Pattern.java:3706) at java.util.regex.Pattern$Branch.match(Pattern.java:4516) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4570) at java.util.regex.Pattern$Loop.match(Pattern.java:4697) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4629) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4480) at java.util.regex.Pattern$CharProperty.match(Pattern.java:3706) at java.util.regex.Pattern$Branch.match(Pattern.java:4516) at […]