Tag: 正则表达式

你能在String split中使用零宽度匹配正则表达式吗?

System.out.println( Arrays.deepToString( “abcghi”.split(“(?:)”) ) ); 这打印[abc, def, ghi] ,好像我已经拆分”” 。 我希望它打印[abc, , ghi] 。 有没有办法使用一些正则表达式魔法来完成我想要的东西? 也许是一个更简单的例子: System.out.println( Arrays.deepToString( “Hello! Oh my!! Good bye!!”.split(“(?:!+)”) ) ); 这打印[Hello, Oh my, Good bye] 。 我想要它打印[Hello!, Oh my!!, Good bye!!] 。 `。

Java String.split()有时会给出空字符串

我正在制作一个基于文本的骰子滚筒。 它接受像“2d10 + 5”这样的字符串,并且作为滚动的结果返回一个字符串。 我的问题出现在tokenizer中,它将字符串拆分为有用的部分,以便我解析信息。 String[] tokens = message.split(“(?=[dk\\+\\-])”); 这产生了奇怪的,意想不到的结果。 我不知道究竟是什么导致了他们。 它可能是正则表达式,我的误解,或Java只是Java。 这是发生了什么: 3d6+4产生字符串数组[3, d6, +4] 。 这是对的。 d%产生字符串数组[d%] 。 这是对的。 d20产生字符串数组[d20] 。 这是对的。 d%+3产生字符串数组[, d%, +3] 。 这是不正确的。 d20+2产生字符串数组[, d20, +2] 。 这是不正确的。 在第四个和第五个例子中,一些奇怪的东西导致额外的空字符串出现在数组的前面。 这并不是字符串前面缺少数字,因为其他例子反驳了这一点。 这不是百分号的存在,也不是加号。 现在我只是继续通过空白字符串的for循环,但这感觉就像一个创可贴解决方案。 有没有人知道是什么原因造成arrays前面的空白字符串? 我该如何解决?

以这种格式从字符串解析日期:dd / MM / yyyy

我想在Java中用这种格式解析String的最佳方法是dd / MM / yyyy [到dd / MM / yyyy]。 带[]的字符串是可选的,dd代表日期的2位数表示,MM是月份的2位数表示,yyyy是年份的4位数表示。 更新 谢谢大家的快速响应,但我忘了告诉你[]是象征可选,字符串中没有[]可能是一个示例字符串 22/01/2010 2010年1月22日至23/01/2010 空值 目前我用这种方式编写代码,工作但很难看=( String _daterange = (String) request.getParameter(“daterange”); Date startDate = null, endDate = null; // Format of incoming dateRange is if (InputValidator.requiredValidator(_daterange)) { String[] _dateRanges = _daterange.toUpperCase().split(“TO”); try { startDate = (_dateRanges.length > 0) ? sdf.parse(_dateRanges[0]) : null; try{ endDate […]

正则表达式替换所有忽略大小写

如何忽略以下示例中的大小写? outText = inText.replaceAll(word, word.replaceAll(” “, “~”)); 例: 输入: inText = “Retail banking Wikipedia, the free encyclopedia Retail banking ” + “From Wikipedia. retail banking industry.” word = “retail banking” 产量 outText = “Retail~banking Wikipedia, the free encyclopedia Retail~banking ” + “From Wikipedia. retail~banking industry.”

正则表达式匹配3个或更多连续顺序字符和连续相同字符

我需要正则表达式来匹配以下情况。 3个或更多连续的连续字符/数字; 例如123,abc,789,pqr等 3个或更多连续相同的字符/数字; 例如111,aaa,bbb,222等

正则表达式中捕获特殊字符时出错

我写了一个正则表达式来捕获输入字符串中的特殊字符,但它也捕获了数字。 这是正则表达式, final String REGEX=”[^.,%*$#@?^’|/\\\\~\\[\\]{}+-=\”]*”; 我只需要抓住上面提到的字符。 请帮帮我。

如何选择空白模式?

在Oracle Pattern文档中,有三种不同匹配空格的模式的描述: \ S \ p {空间} \ p {javaWhitespace} 我想知道每个人的特殊性以及如何选择合适的人。 我刚刚注意到\p{javaWhitespace}包含更多的空间类型。

Java – 在Regex中转义元字符

我试图在另一个字符串中替换第一次出现的字符串“[]”: aString.replaceFirst(“[]”,“blah”); 我收到错误:java.util.regex.PatternSyntaxException:索引1 []附近的未闭合字符类 [和]显然是元字符,但是当我试图用\ eclipse来逃避它们时,抱怨它不是一个有效的转义序列。 我看了但是找不到,我错过了什么? 谢谢

我可以进一步提高这个正则表达式的性能吗?

我试图从线程转储文件中获取线程名称。 线程名称通常包含在每个线程转储的第一行的“双引号”中。 它可能看起来如下所示: “THREAD1” daemon prio=10 tid=0x00007ff6a8007000 nid=0xd4b6 runnable [0x00007ff7f8aa0000] 或者大到如下: “[STANDBY] ExecuteThread: ’43’ for queue: ‘weblogic.kernel.Default (self-tuning)'” daemon prio=10 tid=0x00007ff71803a000 nid=0xd3e7 in Object.wait() [0x00007ff7f8ae1000] 我写的正则表达式很简单: “(.*)” 。 它将双引号内的所有内容作为一组捕获。 然而,这会导致严重的回溯,因此需要很多步骤,如此处所示。 在口头上,我们可以将此正则表达式解释为“捕获任何包含在双引号内的任何内容” 所以我提出了另一个执行相同的正则表达式: “([^\”])” 。我们可以将这个正则表达式描述为”捕获任意数量的双引号括起来的非双引号字符“ 。我没有发现任何快速正则表达式。它不执行任何回溯,因此它需要最少的步骤,如此处所示。 我把这个告诉了我的同事。 他想出了另一个: “(.*?)” 。 我没弄明白它是如何运作的。 与第一个相比,它执行的回溯相当少,但比第二个慢一点,如此处所示。 然而 我不明白为什么回溯会提前停止。 我明白了? 是一个量词,意味着once or not at all 。 但是我不明白once or not at all这里once […]

理解Java中的正则表达式:split(“\ t”)vs split(“\\ t”) – 它们何时都有效,何时应该使用它们

我最近发现我在代码中没有正确使用正则表达式。 给str.split(“\t”)表符分隔字符串str的示例,我一直在使用str.split(“\t”) 。 现在我意识到这是错误的并且正确匹配标签我应该使用str.split(“\\t”) 。 然而,我碰巧偶然发现了这个事实,因为我正在为其他东西寻找正则表达式。 你看,错误的代码split(“\t”)在我的情况下工作得很好,现在我很困惑,为什么它可以正常工作,如果它是一个错误的方式来声明匹配tab字符的正则表达式。 因此,问题是,为了实际理解如何在Java中处理正则表达式,而不是仅仅将代码复制到Eclipse中而不是真正关心其工作原理…… 以类似的方式,我发现了一段不仅以制表符分隔而且以逗号分隔的文本。 更清楚地说,我正在解析的制表符分隔列表有时包括“复合”项,它们看起来像: item1,item2,item3 ,我想将它们解析为单独的元素,为了简单起见。 在这种情况下,适当的正则表达式应该是: line.split(“[\\t,]”) ,或者我在这里也错了? 提前致谢,