我想检查用户在服务器端的输入。 如果用户输入的数字111111或22222具有相同的数字, 如果输入顺序如12345或456789。
答案 0 :(得分:13)
匹配连续相同的数字:
^([0-9])\1*$
请注意,当您将其放在java字符串文字中时,必须转义反斜杠,例如: "^([0-9])\\1*$"
。
对于第二个,您必须使用|
运算符明确地创建连续数字列表。正则表达式真的很长很讨厌,有多达10个嵌套的parantheses。必须使用程序生成此正则表达式。换句话说,这是使用正则表达式解决的错误问题。编写循环并测试它会更简单。
答案 1 :(得分:3)
如果用户输入相同的数字,此模式将匹配:
^(\d)\1*$
\1
匹配第一个捕获组,因此模式匹配是否对整个字符串重复该第一个数字。
第二个问题(连续数字)有点困难。
^(?:^(?:^(?:^(?:^0?1)?2)?3)4?)?5(?:$|6(?:$|7(?:$|8(?:$|90?))))$|
^(0?1)?2(?:$|3(?:$|4))|^(6?7)?8(?:$|90?)$
是一种实现,假设有三位或更多位数。但由于组合的数量很少,枚举(4+位)也是可能的:
^(?:0?123(45?)?|1?23456?|2?34567?|3?45678?|4?56789?|(5?6)?7890?|
(0?1)?2345678?(90$)?|1?23456789?|2?345678(90?)?)$
所有这些都说,正则表达式并不总能很好地解决这类问题。检查此序列的Java方法可能更清晰。
答案 2 :(得分:1)
这次在perl中,更容易解释第二种情况:
Dim Val As String
Dim WrdDoc As Document
Dim FormFieldCounter As Integer
Dim TotalFormFields As Integer
Set wordapp = CreateObject("word.Application")
wordapp.Documents.Open filename:=filenme, ReadOnly:=True
wordapp.ScreenUpdating = False
Set WrdDoc = wordapp.Documents(filenme)
wordapp.Visible = True
Dim version As String
version = WrdDoc.Sections(1).Footers(wdHeaderFooterPrimary).Range.Text
FormFieldCounter = 1
RowCounter = RowCounter + 1
TotalFormFields = WrdDoc.FormFields.Count
Do While FormFieldCounter <= TotalFormFields
WrdDoc.FormFields(FormFieldCounter).Select
Val = WrdDoc.FormFields(FormFieldCounter).result
Sheets("Sheet 1").Cells(RowCounter, FormFieldCounter) = Val
FormFieldCounter = FormFieldCounter + 1
Loop
wordapp.Documents(filenme).Close SaveChanges:=wdDoNotSaveChanges
wordapp.Quit
说明:
perl -nlE 'say "BAD number" if ($_ =~ /^(\d)\1*$/ or "123456789" =~ /$_/)'
语言:已经呈现(/(\d)\1*/
)$_ =~ /^(\d)\1*$/
)