Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Clojure或Java中使用正则表达式时,如何使用命名捕获组?_Java_Regex_Clojure - Fatal编程技术网

在Clojure或Java中使用正则表达式时,如何使用命名捕获组?

在Clojure或Java中使用正则表达式时,如何使用命名捕获组?,java,regex,clojure,Java,Regex,Clojure,自Java7以来,已支持命名捕获组。但是,内置Clojure函数re matches、re find和re groups不允许按名称访问捕获组 (ns tst.demo.core (:使用tupelo.core tupelo.test)) (宠爱 ;使用一些命名的捕获组定义电话号码模式。 ;reader literal#“…”允许我们避免像 ;如果使用表单“”(re模式),则需要` (让[patt#“(?\d{3})-(?\d{3})-(?\d{4})”] (is=java.util.regex

自Java7以来,已支持命名捕获组。但是,内置Clojure函数
re matches
re find
re groups
不允许按名称访问捕获组

(ns tst.demo.core
(:使用tupelo.core tupelo.test))
(宠爱
;使用一些命名的捕获组定义电话号码模式。
;reader literal#“…”允许我们避免像
;如果使用表单“”(re模式),则需要`
(让[patt#“(?\d{3})-(?\d{3})-(?\d{4})”]
(is=java.util.regex.Pattern(类型patt))
're matches'将找到捕获组并将它们粘贴到向量中
;完全匹配后,捕获组从1开始编号。
;全场比赛就像零组。
(is=[“619-239-5464”“619”“239”“5464]”(重新匹配patt“619-239-5464”))
;构造一个java.util.regex.Matcher。请记住,它是一个可变对象!
(让[matcher(重新匹配patt“619-239-5464”)]
;通过“重新查找”执行匹配器。它返回所有4个组并缓存它们
(is=[“619-239-5464”“619”“239”“5464]”(重新查找匹配器))
;`re groups`只返回匹配器缓存的结果
(is=[“619-239-5464”“619”“239”“5464]”(重新分组匹配器))

如何在Clojure的正则表达式中使用命名捕获组?

该类
java.util.regex.Matcher
支持命名捕获组,但您需要使用java interop来获取它们。例如:

; We need the instance function Matcher.group( <name> ) to extract named groups
(is= "619" (.group matcher "area"))
(is= "239" (.group matcher "prefix"))
(is= "5464" (.group matcher "tail"))))
;我们需要实例函数Matcher.group()来提取命名组
(is=“619”(.group matcher“区域”))
(is=“239”(.group matcher“前缀”))
(is=“5464”(.group matcher“tail”))
以上代码基于