RegEx检查数字中的数字是否全部相同或按顺序排列

时间:2011-07-29 08:26:28

标签: java regex

我想检查用户在服务器端的输入。 如果用户输入的数字111111或22222具有相同的数字, 如果输入顺序如12345或456789。

3 个答案:

答案 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

说明:

  • 案例1:输入∈perl -nlE 'say "BAD number" if ($_ =~ /^(\d)\1*$/ or "123456789" =~ /$_/)' 语言:已经呈现(/(\d)\1*/
  • 案例2:字符串&#34; 123456789&#34;匹配输入($_ =~ /^(\d)\1*$/