[英]How to disallow “.” (dot) as first character in regular expressions
我想創建一個正則表達式,以允許字符和數字的所有組合以及點的開頭,但不允許點。 因此有效的字符串可以是“ 1.2.3”或“ 1.b.34d”。 但我想禁止使用“。”之類的字符串。 或“ .1.2.3”。
我正在嘗試
[^.]{0,1}[ a-zA-Z_\\-\\.0-9]*
但這不起作用。 有人有更好的主意嗎?
您可以使用
s.matches("(?!\\.)[\\w\\s.-]*")
模式將匹配不以開頭的字符串.
由於負先行 (?!\\\\.)
並包含零個或多個字字符(字母,數字或下划線- \\w
),空白字符( \\s
) .
或-
符號。 請注意,由於String#matches()
方法默認情況下會錨定模式,因此您不需要^
/ \\A
或$
/ \\z
。
注意 :要使此模式具有Unicode感知,請在模式的開頭添加(?U)
(一個Pattern.UNICODE_CHARACTER_CLASS
嵌入式標志選項): s.matches("(?U)(?!\\\\.)[\\\\w\\\\s.-]*")
。
使用負前瞻:
^(?!\\.)[\w .-]+$
\\w
等效於[a-zA-Z0-9_]
請嘗試^[^\\.][ a-zA-Z_\\\\-\\\\.0-9]*
在正則表達式中,點字符表示“任何字符”。 要匹配垃圾,您需要逃避它。
^[^\\.][ a-zA-Z_\\-\\.0-9]*
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.