Jon*_*oso 2 java regex clojure
我正在尝试使用正则表达式来匹配一个模式,例如(letter(letter|number))*,我的意思是一个字符串,其长度无限但是带有"以字母开头,然后是字母或数字"规则.
所以我#"\w+[\w|\d]*"在clojure中使用这个模式,但如果我只使用一个数字验证,就像下面的代码一样,我做错了什么?
(re-matches #"\w+[\w|\d]*" "1")
Run Code Online (Sandbox Code Playgroud)
令牌\w匹配字母和数字.从文档:
\w单词字符:[a-zA-Z_0-9]
使用[a-z],\p{Lower},\p{Upper}或\p{Alpha}信件:
[a-z][a-z0-9]*
Run Code Online (Sandbox Code Playgroud)
(另请注意,这+并没有什么区别.)
其他答案对于您提出的问题看起来很好,但听起来您可能真的想要验证标识符.请注意,Java API提供了一些有用的实用方法来实现这一点.有时显性比正则表达更好.
例如
(defn identifier? [s]
(and (Character/isJavaIdentifierStart (first s))
(empty? (remove #(Character/isJavaIdentifierPart %) (rest s)))))
Run Code Online (Sandbox Code Playgroud)
在java 6及更高版本中,您可以这样做:
(defn identifier? [s]
(and (not (javax.lang.model.SourceVersion/isKeyword s))
(javax.lang.model.SourceVersion/isIdentifier s)))
Run Code Online (Sandbox Code Playgroud)