0 0

这个正则中的具体意思5

System.out.println(StringUtils.join("0098765424100304643528".split("(?<=\\G.{4})"), "->"));


上面的是一个正则 , 主要是把字符串按四个分割, 中间插入-> , 现在我想请教一下, 这里面的\\G究竟是干什么的呢? 求指导

问题补充:非常感谢liuqing_2010_07 、LeeYee 两位兄弟的回答。。。。 这里我有个疑问, 我们有在jdk中的pattern类的说明中找到\\G的解释。。。 请问两位是在什么地方找到的?还有对于正则表达式的jdk的解释引擎和prel的及其他语言的解释引擎有什么具体的区别呢?正则表达式是不是不只是看懂那些仅有的几个符号表达的意思就可以了。。。 请求两位详细指教。。。。 先谢谢了额

问题补充:确实是呀,小弟第一次找, 没找到\\G的说明, 所以就感觉很困惑, 谢谢两位的解答。。。
LeeYee 写道
引用
这里我有个疑问, 我们有在jdk中的pattern类的说明中找到\\G的解释。。。 请问两位是在什么地方找到的?还有对于正则表达式的jdk的解释引擎和prel的及其他语言的解释引擎有什么具体的区别呢?正则表达式是不是不只是看懂那些仅有的几个符号表达的意思就可以了。。。


1、你有java的帮助文档没?没有的话下一个java中文帮助文档。上哦所里面的pattern类继就可以看到
引用
Unicode 块和类别的类
\p{InGreek} Greek 块(简单块)中的字符
\p{Lu} 大写字母(简单类别)
\p{Sc} 货币符号
\P{InGreek} 所有字符,Greek 块中的除外(否定)
[\p{L}&&[^\p{Lu}]]  所有字母,大写字母除外(减去)
 
边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾
 
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
 
Reluctant 数量词
X?? X,一次或一次也没有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n 次
X{n,}? X,至少 n 次
X{n,m}? X,至少 n 次,但是不超过 m 次

2、至于跟perl的引擎有什么区别,呵呵,这个不是一两句话就能讲明白的。因为这个正则表达式在各个语言中的是不尽相同的。如果你想了解下的话,给你推荐一本书《精通正则表达式》,当当的地址是http://product.dangdang.com/product.aspx?product_id=20653863。这本书写的相当不错。你可以参考下。目前我正在读,呵呵!

希望对你有帮助!

2012年1月09日 23:03

4个答案 按时间排序 按投票排序

0 0

采纳的答案

引用
这里我有个疑问, 我们有在jdk中的pattern类的说明中找到\\G的解释。。。 请问两位是在什么地方找到的?还有对于正则表达式的jdk的解释引擎和prel的及其他语言的解释引擎有什么具体的区别呢?正则表达式是不是不只是看懂那些仅有的几个符号表达的意思就可以了。。。


1、你有java的帮助文档没?没有的话下一个java中文帮助文档。上哦所里面的pattern类继就可以看到
引用
Unicode 块和类别的类
\p{InGreek} Greek 块(简单块)中的字符
\p{Lu} 大写字母(简单类别)
\p{Sc} 货币符号
\P{InGreek} 所有字符,Greek 块中的除外(否定)
[\p{L}&&[^\p{Lu}]]  所有字母,大写字母除外(减去)
 
边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾
 
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
 
Reluctant 数量词
X?? X,一次或一次也没有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n 次
X{n,}? X,至少 n 次
X{n,m}? X,至少 n 次,但是不超过 m 次

2、至于跟perl的引擎有什么区别,呵呵,这个不是一两句话就能讲明白的。因为这个正则表达式在各个语言中的是不尽相同的。如果你想了解下的话,给你推荐一本书《精通正则表达式》,当当的地址是http://product.dangdang.com/product.aspx?product_id=20653863。这本书写的相当不错。你可以参考下。目前我正在读,呵呵!

希望对你有帮助!

2012年1月11日 10:51
0 0

楼上补充的很好!顶一个

2012年1月10日 19:11
0 0

引用
\G 表示前一个匹配的结束。这里指一次截取4个字符串。
Java代码 
0098->7654->2410->0304->6435->28 

代码改为:
Java代码 
System.out.println(StringUtils.join("0098765424100304643528".split("(?<=\\G.{5})"), "->"));   
00987->65424->10030->46435->28 


可以参照的网址:
http://developer.51cto.com/art/200902/110238.htm
http://www.tutorialspoint.com/java/java_regular_expressions.htm
http://www.regular-expressions.info/java.html


实际上?<=\\G.{5})匹配是位置,然后在匹配的位置上加入替换符号。

.{5}是任意5个字符。
\\G如liuqing_2010_07所述是表示前一个匹配的结束,也就是第一次匹配5个字符后的位置。这个在JAVA API java.util.regex.Pattern中有说明
?<=是逆向环视,可以理解为查看匹配的字符的左边是否为等号右边的值

所以?<=\\G.{5})匹配每5个字符且为该匹配字符的左边是上次匹配的结束位置,注意这里匹配的是位置。
对于0098765424100304643528其实就是找00987|65424|10030|46435|28中|的位置,然后在该位置插入->。

为什么不匹配  |00987|65424|10030|46435|28 是由于对于第一匹配00987 的左边不是\\G

2012年1月10日 09:00
0 0

\G 表示前一个匹配的结束。这里指一次截取4个字符串。

0098->7654->2410->0304->6435->28

代码改为:
System.out.println(StringUtils.join("0098765424100304643528".split("(?<=\\G.{5})"), "->"));  
00987->65424->10030->46435->28


可以参照的网址:
http://developer.51cto.com/art/200902/110238.htm
http://www.tutorialspoint.com/java/java_regular_expressions.htm
http://www.regular-expressions.info/java.html

2012年1月09日 23:22

相关推荐

    Java使用正则表达式提取XML节点内容的方法示例

    这个正则表达式的意思是:匹配任何以 `&gt;` 开始,以 `结束,并且中间可以包含任何字符(包括 `和 `&gt;`)的字符串。 三、正则表达式在线测试工具 为了方便开发者测试和调试正则表达式,我们提供了两个非常方便的正则...

    正则表达式判断手机邮箱

    这个表达式的意思是:以1开头,第二位是3到9之间的数字,后面跟着9个任意数字。 邮箱地址的正则表达式相对复杂,因为它允许包含字母、数字、点、下划线、减号以及@符号和点号(.)组成的域名部分。一个基本的邮箱...

    用正则表达式去掉行号

    这个正则表达式的意思是:从行的开始(`^`)匹配一个或多个数字(`\\d+`),后面跟着零个或多个空格(`\\s*`)。`re.sub`函数会将匹配到的部分替换为空字符串,从而移除行号。 执行后,原本带行号的文本会被写入新的文件`...

    正则表达式总结-form表单

    下面我们将结合具体的示例来详细探讨如何在form表单中应用正则表达式。 #### 1. 表单元素验证 表单中的输入字段经常需要进行合法性检查,以确保用户提交的数据符合预期格式。例如,在一个注册表单中,可能需要对...

    正则表达式

    我们已经发现了,在正则表达式中所有的字母字符和数字都是按照字面意思与自身相匹配的.JavaScript的正则表达式还通过以反斜杠(\)开头的转义序列支持某些非 字母字符.例如,序列 "\n" 在字符串中匹配的是一个直接量换...

    快速上手正则表达式

    例如,在使用awk命令时,$0~/Brown/是一个条件表达式,其中$0代表整行文本,~是匹配的意思,/Brown/就是我们要匹配的规则,如果文本中包含单词Brown,那么整个表达式的结果为真,打印出该行。这里的Brown被包含在两...

    验证手机和邮箱的正则表达式

    本文将深入探讨“验证手机和邮箱的正则表达式”这一主题,通过对给定文件中的代码示例进行分析,我们将详细了解用于验证手机号码与电子邮件地址的有效性检查方法。 ### 一、验证手机号码的正则表达式 #### 1.1 ...

    [精通正则表达式(第三版)].(美)佛瑞德.扫描版.pdf

    然而,具体到“精通正则表达式(第三版)”这本书,我们可以进一步探讨正则表达式的概念及其在编程中的应用。 ### 正则表达式基础 正则表达式是一种强大的文本处理工具,能够帮助开发者执行复杂的字符串搜索和替换...

    实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)

    这个表达式的意思是:从字符串的开始到结束,匹配一个或多个数字(0-9),并且数字的个数在1到20之间。这个正则表达式可以用来校验数字输入,比如,可以用于校验验证码是否由数字组成。 接下来是校验登录名的函数。...

    C# 正则式(应用)

    例如,在`IsRegularEmail`方法中,使用了`@"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" `这个正则表达式来验证电子邮件地址的合法性。这个表达式的意思是: - `^`:匹配字符串的开始。 - `[\w-]+`:匹配一个或多个...

    手机号码正则

    - 竖线 `|` 表示“或”的意思,用于选择多个选项中的一个。 - **字符范围与重复**: - `[ ]` 定义一个字符范围。 - `\d` 表示任意数字字符,等价于 `[0-9]`。 - `{n}` 表示前面的元素恰好出现 n 次。 - **具体...

    正则表达式全解.pdf

    - 这是最基础的正则表达式形式,支持简单的模式匹配。 - 在某些场景下,BREs可能不如EREs灵活。 2. **扩展的正则表达式 (Extended Regular Expression, EREs)** - 相对于BREs,EREs引入了更多的语法特性,使得...

    Java 正则表达式详解

    根据提供的文件信息,本文将对Java正则表达式的相关知识点进行...通过上述介绍,我们了解了Java正则表达式的基本概念、符号及其在Java中的具体应用。熟练掌握这些知识点可以帮助开发者更高效地处理字符串相关的任务。

    运用正则表达式匹配所有表名

    这个过程涉及到编写一个能够识别表名的正则表达式模式。表名可能以多种方式出现,例如直接跟随SELECT关键字,或者作为字段的一部分,也可能出现在其他SQL语句中,如INSERT、JOIN、UPDATE等。 正则表达式中的特殊...

    JavaScript正则表达式校验非负整数实例

    总结来说,本文通过一个具体的实例代码详细介绍了如何使用JavaScript中的正则表达式来校验非负整数。通过提供两种不同的正则表达式模式以及它们的使用场景,读者可以针对不同的需求选择合适的表达式进行校验。代码...

    php正则学习

    了解了正则表达式的构成后,接下来通过几个具体的例子来加深理解: 1. **使用`^`和`$`匹配特定位置的字符串** - `"^The"`:匹配以"The"开头的字符串。 - `"ofdespair$"`:匹配以"ofdespair"结尾的字符串。 - `"^...

Global site tag (gtag.js) - Google Analytics