关于Java/Groovy正则表达式可解析无分隔符的键-值对和java正则表达式不包含特殊字符的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Groovy/Java正则表达式循环遍历模式匹
关于Java / Groovy正则表达式可解析无分隔符的键-值对和java正则表达式不包含特殊字符的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Groovy / Java正则表达式循环遍历模式匹配、groovy : 正则表达式、Groovy Tip 16 正则表达式 一、Groovy Tip 19 正则表达式 二等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- Java / Groovy正则表达式可解析无分隔符的键-值对(java正则表达式不包含特殊字符)
- Groovy / Java正则表达式循环遍历模式匹配
- groovy : 正则表达式
- Groovy Tip 16 正则表达式 一
- Groovy Tip 19 正则表达式 二
Java / Groovy正则表达式可解析无分隔符的键-值对(java正则表达式不包含特殊字符)
您可以在第二组中捕获键之后的所有内容以及所有不以键开头的行
^(MA\d+)(.*(?:\R(?!MA\d).*)*)
模式匹配
-
^
字符串的开头 -
(MA\d+)
捕获匹配MA和1位以上数字的第1组 -
(
捕获第2组-
.*
匹配其余行 -
(?:\R(?!MA\d).*)*
匹配所有不以MA开头且后跟数字的行,其中\R
匹配任何unicode换行符序列
-
-
)
关闭第2组
Regex demo
在Java中,转义的反斜杠加倍
final String regex = "^(MA\\d+)(.*(?:\\R(?!MA\\d).*)*)";
,
使用
(?ms)^(MA\d+)(.*?)(?=\nMA\d|\z)
请参见proof。
说明
EXPLANATION
--------------------------------------------------------------------------------
(?ms) set flags for this block (with ^ and $
matching start and end of line) (with .
matching \n) (case-sensitive) (matching
whitespace and # normally)
--------------------------------------------------------------------------------
^ the beginning of a "line"
--------------------------------------------------------------------------------
( group and capture to \1:
--------------------------------------------------------------------------------
MA 'MA'
--------------------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
) end of \1
--------------------------------------------------------------------------------
( group and capture to \2:
--------------------------------------------------------------------------------
.*? any character (0 or more times (matching
the least amount possible))
--------------------------------------------------------------------------------
) end of \2
--------------------------------------------------------------------------------
(?= look ahead to see if there is:
--------------------------------------------------------------------------------
\n '\n' (newline)
--------------------------------------------------------------------------------
MA 'MA'
--------------------------------------------------------------------------------
\d digits (0-9)
--------------------------------------------------------------------------------
| OR
--------------------------------------------------------------------------------
\z the end of the string
--------------------------------------------------------------------------------
) end of look-ahead
Groovy / Java正则表达式循环遍历模式匹配
我有一个字符串,其中包含一些以十六进制表示的字节,我想要提取.例如:
String str = "051CF900: 00 D3 0B 60 01 A7 16 C1 09 9C"
我想提取值并将它们连接在一个字符串中,使它看起来像:
00D30B6001A716C1099C
我的尝试:
String stream = "";
Pattern pattern = Pattern.compile("\\b[A-F0-9]{2}\\b");
matcher = pattern.matcher(str);
matcher.find{ newByte ->
println(newByte);
stream += newByte;
};
println(stream);
当我尝试将每个字节添加到流时,它似乎停止循环.如果我删除该行,则每个字节都会成功打印出来.当我将newByte添加到流时,为什么循环会中断?
解决方法:
由于这是Groovy,您可以将所有代码更改为:
String stream = str.findAll( /\b[A-F0-9]{2}\b/ ).join()
groovy : 正则表达式
groovy 正则表达式 企图模仿Perl 的语法,结果是我试用后,发现没法提取匹配的字符串。
还是直接引用 java.util.regex 负责对字符序列进行正则表达式匹配
先转载水木清华上的例子 RegexTest.java
import java.util.regex.*; /** * java.util.regex 负责对字符序列进行正则表达式匹配 * Pattern负责编译 * Matcher负责匹配 * 字符串: (010)abcdefg{beijing}opjhhkk * 正则模式: /\((\d+)\).*\{([a-zA-Z]+)\}/ */ public class RegexTest { public static void main(String [] args) { Pattern p = Pattern.compile("\\((\\d+)\\).*\\{([a-zA-Z]+)\\}"); Matcher m = p.matcher("(010)abcdefg{beijing}opjhhkk "); if (m.find()) { System.out.println(m.group(0)); // (010)abcdefg{beijing}opjhhkk System.out.println(m.group(1)); // 010 System.out.println(m.group(2)); // beijing } } }运行 java RegexTest
以下原创:
我想从一行字符串中提取身份证号码 regexTest.groovy
import java.util.regex.*; /** * 字符串: 1234567890123456789 ID:44010119800101246X abcdefg * 正则式1: /ID.+(\d{17}[0-9Xx])/ * 正则式2: /(\d{18}).*ID.+(\d{17}[0-9Xx])/ */ public class RegexTest { public static void main(String [] args) { Pattern p = Pattern.compile("ID.+(\\d{17}[0-9Xx])"); Matcher m = p.matcher(" 1234567890123456789 ID:44010119800101246X abcdefg "); if (m.find()) { int g = m.groupCount(); println("groups: "+g); for(int i=0; i<=g; i++){ println(i+": "+m.group(i)); } } } }运行 groovy regexTest
Groovy Tip 16 正则表达式 一
Groovy Tip 19 正则表达式 二
Groovy Tip 19 正则表达式 二
我们在前一篇的《正则表达式》中重点谈到了Groovy语言的一些重要的通配符,可以说那些通配符是一些标准的和基础的通配符。看过了那些通配符以后,我就常常在想,Groovy语言作为一种敏捷性的动态语言,会不会有一些更为方便的通配符呢?
如我们所愿,Groovy语言为我们提供了如下的一些更为简便的通配符:
/d 数字字符
/D 非数字字符
/s 空格符
/S 非空格符
/w 文字字符
/W 非文字字符
/b 单词标记
^ 语句行的开头
$ 语句行的结尾
可以看到,这些通配符正是在以前通配符的基础上,对一些常用的正则表达式做进一步的通配,以达到简化我们编码的目的。下面试举几个例子来看看这些通配符的用法。
通配符“/d”就是对数字字符的通配,比如:
就打印“true”,而
就打印“false”。
我们在前一篇的《正则表达式》中有一个匹配数字的例子,是这样的:
def str = ''1000.31''
def re = /[0-9]+(/.[0-9]+)?/
@H_126_301@println str ==~ re
这个正则表达式就有点长了,我们现在使用“/d”通配符就可以把上面的正则表达式简化成下面的样子:
而“/D”匹配的则是非数字,如:
@H_126_301@println str4 ==~ //D/
“/s”匹配的是空格,如:
所有非空格的通配符则是“/S”。
“/w”匹配的是单词的字母,相当于“/[a-zA-Z]/”,如:
@H_126_301@println str1 ==~ //w/
而所有的非单词字母符号的通配符为“/W”,如:
@H_126_301@println str5 ==~ //W/
“/b”指的是单词标记,如:
以“ed”结尾的过去式的匹配为:
而下面的例子则不匹配:
而“^”则注意要跟“[^]”区别开来,“^”表示以什么开头,而“[^]”则表示非。如下面所示的例子。
下面的例子表示非a、b、c三个字母的所有符号:
而下面的例子则表示以“abc”开头的匹配:
@H_126_301@println ''abcd'' ==~ /^abc./
而下面的例子却不匹配:
@H_126_301@println ''adcd'' ==~ /^abc./
今天的关于Java / Groovy正则表达式可解析无分隔符的键-值对和java正则表达式不包含特殊字符的分享已经结束,谢谢您的关注,如果想了解更多关于Groovy / Java正则表达式循环遍历模式匹配、groovy : 正则表达式、Groovy Tip 16 正则表达式 一、Groovy Tip 19 正则表达式 二的相关知识,请在本站进行查询。
本文标签: