[英]Pattern matching in Clojure/Java
我正在尝试使用正则表达式匹配一个模式,如(letter(letter|number))*
,我的意思是一个字符串,其长度无限但带有“以字母开头,然后是字母或数字”规则。
所以我在clojure中使用这种模式#"\\w+[\\w|\\d]*"
,但如果我只使用一个数字验证,就像下面的代码一样,我做错了什么?
(re-matches #"\w+[\w|\d]*" "1")
令牌\\w
匹配字母和数字。 从文档 :
\\w
一个字符:[a-zA-Z_0-9]
使用[az]
, \\p{Lower}
, \\p{Upper}
或\\p{Alpha}
作为字母:
[a-z][a-z0-9]*
(另请注意, +
没有区别。)
其他答案对于您提出的问题看起来很好,但听起来您可能真的想要验证标识符。 请注意,Java API提供了一些有用的实用方法来实现这一点。 有时显性比正则表达更好。
例如
(defn identifier? [s]
(and (Character/isJavaIdentifierStart (first s))
(empty? (remove #(Character/isJavaIdentifierPart %) (rest s)))))
在java 6及更高版本中,您可以这样做:
(defn identifier? [s]
(and (not (javax.lang.model.SourceVersion/isKeyword s))
(javax.lang.model.SourceVersion/isIdentifier s)))
\\w
匹配字母或数字:
\\ w一个字符:[a-zA-Z_0-9]
http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html
所以将你的正则表达式改为: [a-zA-Z]\\w*
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.