是否有一个regex来匹配不断增加的连续数字字符串,例如123、56789等?
但是
当然
有,因为答案
全部的
问题开始了,是否有一个(perl)regex与_匹配?_157;总是__为什么,当然有!_157;操作问题始终是,__
什么
Perl Regex是否匹配__?艾格斯
简短回答
Perl正则表达式如下:
m{
^ (
( \d )
(?(?= ( \d )) | $)
(?(?{ ord $3 == 1 + ord $2 }) (?1) | $)
) $
}x
如果有两个不同的
(?(COND)THEN|ELSE)
条件组,其中递归组1作为第二个条件组的then子句。那是什么?
(?1)
做。
好极了,嗯?
递归模式
像这些一样
酷酷
和
难以置信的强大;
用这种力量服务于善而非恶,这取决于你自己。艾斯
我在下面给出的程序中使用了一种稍微不那么聪明的形式。我会把另一个放在它开始的地方,这样你就可以在Perl中看到它了。
有多种方法可以做到这一点
.
完整的演示程序
注意,不管怎样,这都有效
什么
Unicode数字的字符串,包括非ASCII(欢迎来到勇敢的新千年),甚至在语言停留在ucs-2(有时甚至是utf-16)上的星空平面上,都无法思考。
此输出:
Yes: 3456
No: 43
Yes: 567
No: 1245
No: 568
No: 987
Yes: 12
Yes: 12345
No: 24
No: 13456
No: 12354678
Yes: 12345678
No: ١٣٠٢
Yes: ٤٥٦٧
No: २१३
Yes: ४५६à¥
Yes: ८९
No: ১১২
Yes: ৩৪৫৬
No: à§à§®à§¯à§®
Yes: ௮௯
No: ௮௮
No: à¹à¹à¹à¹
Yes: à¹à¹à¹
No: ༣༤༢༥༧༦༨
No: ï¼ï¼ï¼ï¼ï¼
Yes: ï¼ï¼ï¼
Yes: ï¼ï¼
Yes: ðððð
No: ðððð
No: ðððð
Yes: ðððð
Yes: ðð®ð¯ð°ð±ð²ð³ð´ðµ
Yes: ð¶ð·
No: ð¸ð¹ðºð¼ð»
Yes: ð¹ðºð»ð¼ð½ð¾ð¿
由该程序生成:
#!/usr/bin/env perl
use 5.10.0;
use utf8;
use strict;
use autodie;
use warnings qw< FATAL all >;
use open qw< :std :utf8 >;
use charnames qw< :full >;
# to iterate is humanâ¦
my @numbers = (
3456,
43,
567,
1245,
568,
987,
12,
12345,
24,
13456,
12354678,
12345678,
hard_stuff(),
);
my $ascending_rx = qr{
^ ( # works for *ANY* script!
( \p{Decimal_Number} )
(?= $ | (??{ chr(1+ord($2)) }) )
(?: (?1) | $ ) # â¦to recurse, divine!
) $
}x;
for my $n (@numbers) {
printf "%s: %10s\n",
($n =~ $ascending_rx) ? "Yes" : " No",
$n;
}
sub hard_stuff {
( "\N{ARABIC-INDIC DIGIT ONE}"
. "\N{ARABIC-INDIC DIGIT THREE}"
. "\N{ARABIC-INDIC DIGIT ZERO}"
. "\N{ARABIC-INDIC DIGIT TWO}"
),
( "\N{ARABIC-INDIC DIGIT FOUR}"
. "\N{ARABIC-INDIC DIGIT FIVE}"
. "\N{ARABIC-INDIC DIGIT SIX}"
. "\N{ARABIC-INDIC DIGIT SEVEN}"
),
( "\N{DEVANAGARI DIGIT TWO}"
. "\N{DEVANAGARI DIGIT ONE}"
. "\N{DEVANAGARI DIGIT THREE}"
),
( "\N{DEVANAGARI DIGIT FOUR}"
. "\N{DEVANAGARI DIGIT FIVE}"
. "\N{DEVANAGARI DIGIT SIX}"
. "\N{DEVANAGARI DIGIT SEVEN}"
),
( "\N{DEVANAGARI DIGIT EIGHT}"
. "\N{DEVANAGARI DIGIT NINE}"
),
( "\N{BENGALI DIGIT ONE}"
. "\N{BENGALI DIGIT ONE}"
. "\N{BENGALI DIGIT TWO}"
),
( "\N{BENGALI DIGIT THREE}"
. "\N{BENGALI DIGIT FOUR}"
. "\N{BENGALI DIGIT FIVE}"
. "\N{BENGALI DIGIT SIX}"
),
( "\N{BENGALI DIGIT SEVEN}"
. "\N{BENGALI DIGIT EIGHT}"
. "\N{BENGALI DIGIT NINE}"
. "\N{BENGALI DIGIT EIGHT}"
),
( "\N{TAMIL DIGIT EIGHT}"
. "\N{TAMIL DIGIT NINE}"
),
( "\N{TAMIL DIGIT EIGHT}"
. "\N{TAMIL DIGIT EIGHT}"
),
( "\N{THAI DIGIT SIX}"
. "\N{THAI DIGIT SEVEN}"
. "\N{THAI DIGIT SEVEN}"
. "\N{THAI DIGIT EIGHT}"
),
( "\N{THAI DIGIT SIX}"
. "\N{THAI DIGIT SEVEN}"
. "\N{THAI DIGIT EIGHT}"
),
( "\N{TIBETAN DIGIT THREE}"
. "\N{TIBETAN DIGIT FOUR}"
. "\N{TIBETAN DIGIT TWO}"
. "\N{TIBETAN DIGIT FIVE}"
. "\N{TIBETAN DIGIT SEVEN}"
. "\N{TIBETAN DIGIT SIX}"
. "\N{TIBETAN DIGIT EIGHT}"
),
( "\N{FULLWIDTH DIGIT ZERO}"
. "\N{FULLWIDTH DIGIT ONE}"
. "\N{FULLWIDTH DIGIT ONE}"
. "\N{FULLWIDTH DIGIT THREE}"
. "\N{FULLWIDTH DIGIT TWO}"
),
( "\N{FULLWIDTH DIGIT TWO}"
. "\N{FULLWIDTH DIGIT THREE}"
. "\N{FULLWIDTH DIGIT FOUR}"
),
( "\N{FULLWIDTH DIGIT EIGHT}"
. "\N{FULLWIDTH DIGIT NINE}"
),
#############################################
# Who's afraid of the astral planes?
# Try THIS, all you prisoners of UTF-16!
#############################################
( "\N{MATHEMATICAL BOLD DIGIT TWO}"
. "\N{MATHEMATICAL BOLD DIGIT THREE}"
. "\N{MATHEMATICAL BOLD DIGIT FOUR}"
. "\N{MATHEMATICAL BOLD DIGIT FIVE}"
),
( "\N{MATHEMATICAL BOLD DIGIT FIVE}"
. "\N{MATHEMATICAL BOLD DIGIT FOUR}"
. "\N{MATHEMATICAL BOLD DIGIT THREE}"
. "\N{MATHEMATICAL BOLD DIGIT TWO}"
),
( "\N{MATHEMATICAL DOUBLE-STRUCK DIGIT ONE}"
. "\N{MATHEMATICAL DOUBLE-STRUCK DIGIT TWO}"
. "\N{MATHEMATICAL DOUBLE-STRUCK DIGIT TWO}"
. "\N{MATHEMATICAL DOUBLE-STRUCK DIGIT THREE}"
),
( "\N{MATHEMATICAL DOUBLE-STRUCK DIGIT THREE}"
. "\N{MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR}"
. "\N{MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE}"
. "\N{MATHEMATICAL DOUBLE-STRUCK DIGIT SIX}"
),
( "\N{MATHEMATICAL SANS-SERIF BOLD DIGIT ONE}"
. "\N{MATHEMATICAL SANS-SERIF BOLD DIGIT TWO}"
. "\N{MATHEMATICAL SANS-SERIF BOLD DIGIT THREE}"
. "\N{MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR}"
. "\N{MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE}"
. "\N{MATHEMATICAL SANS-SERIF BOLD DIGIT SIX}"
. "\N{MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN}"
. "\N{MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT}"
. "\N{MATHEMATICAL SANS-SERIF BOLD DIGIT NINE}"
),
( "\N{MATHEMATICAL MONOSPACE DIGIT ZERO}"
. "\N{MATHEMATICAL MONOSPACE DIGIT ONE}"
),
( "\N{MATHEMATICAL MONOSPACE DIGIT TWO}"
. "\N{MATHEMATICAL MONOSPACE DIGIT THREE}"
. "\N{MATHEMATICAL MONOSPACE DIGIT FOUR}"
. "\N{MATHEMATICAL MONOSPACE DIGIT SIX}"
. "\N{MATHEMATICAL MONOSPACE DIGIT FIVE}"
),
( "\N{MATHEMATICAL MONOSPACE DIGIT THREE}"
. "\N{MATHEMATICAL MONOSPACE DIGIT FOUR}"
. "\N{MATHEMATICAL MONOSPACE DIGIT FIVE}"
. "\N{MATHEMATICAL MONOSPACE DIGIT SIX}"
. "\N{MATHEMATICAL MONOSPACE DIGIT SEVEN}"
. "\N{MATHEMATICAL MONOSPACE DIGIT EIGHT}"
. "\N{MATHEMATICAL MONOSPACE DIGIT NINE}"
),
}
附言:有人说原因是
有多种方法可以做到这一点
在Perl中,要弥补所有其他语言中
不
做这件事的方法通常是其中大部分。艾斯