我是正则表达式的新手。我一直在阅读有关正则表达式的最后几个小时,以了解如何使用正则表达式*来实现以下目标,但运气不佳。我的大脑开始受伤了。因此,这需要帮助。以下是我想要应用于数据输入字段的限制,我应该使用什么正则表达式?
一些有效的输入数据:
.abc_
__abc.d-e.
.__a.
.a__b.
_a-b.
abc
a___.
谢谢和问候,
〜插头
答案 0 :(得分:2)
你应该真正展示你到目前为止所展示的内容。
那就是说,覆盖你的限制的正则表达式应该看起来像这样:
^[a-zA-Z0-9\._](?:[a-zA-Z0-9_]*(?:\.(?!\.))*(?:-(?!-))*[a-zA-Z0-9_]*)*[a-zA-Z0-9\._]$
有人可能会使用更好的格式化版本,但它似乎可以在http://www.regex101.com/
中用于我测试过的所有内容。
答案 1 :(得分:2)
使用单个正则表达式非常麻烦。实际上并不是不可能的,但是你会疯狂地跳这样做,这样你最好还是写一个状态机。但是,通过一系列正则表达式测试很容易做到这一点。
对于条件1和2,文本应与以下内容匹配(允许文本长度只有一个字符):
^([a-z0-9._]|[a-z0-9._][a-z0-9_.-]*[a-z0-9._])$
对于您的条件3,文本应该不匹配其中一个正则表达式(选择适当的,您的规范不是很清楚)。
.*[.-][.-].*
.*(.-|-.).*
.*(\.\.|--).*
对于您的条件4,文本应符合以下内容:
.*[a-z0-9].*
我不允许在这里使用大写字符。如果需要,将它们添加到字符模式中。
答案 2 :(得分:0)
有趣的问题。可以用非平凡的正则表达式来解决。这是Java语法(需要将正则表达式括在一个字符串中。)
Pattern re_valid = Pattern.compile(
" # Regex to validate special word requirements. \n" +
" ^ # Anchor to start of string. And... \n" +
" (?=[A-Za-z0-9._]) # First char is alphanum, dot or underscore. And...\n" +
" (?=.*[A-Za-z0-9._]$) # Last char is alphanum, dot or underscore. And... \n" +
" (?=[^A-Za-z0-9]*[A-Za-z0-9]) # Contains at least one alphanum. \n" +
" (?: # Group two possible content formats. \n" +
" [A-Za-z0-9_]+ # Case 1: Begins with one or more non-[-.]. \n" +
" (?: # Zero or more [-.] separated parts. \n" +
" [-.] # Each part separated by one [-.], \n" +
" [A-Za-z0-9_]+ # followed by one or more non-[-.]. \n" +
" )* # Zero or more [-.] separated parts. \n" +
" [.]? # May end with one [-.]. \n" +
" | [.] # Or Case 2: Begins with hyphen or dot. \n" +
" (?: # Zero or more [-.] separated parts. \n" +
" [A-Za-z0-9_]+ # One or more non-[-.], \n" +
" [-.] # followed by one [-.]. \n" +
" )* # Zero or more [-.] separated parts. \n" +
" [A-Za-z0-9_]* # May end with zero or more non-[-.]. \n" +
" ) # End group of two content alternatives. \n" +
" $ # Anchor to end of string. ",
Pattern.COMMENTS);