2011-05-20 59 views
3

如何测试以查看使用正则表达式的字符串长度?用于测试字符串字符长度的正则表达式

例如,我如何匹配一个字符串,如果它只包含1个字符?

+7

什么语言?为什么不能使用像'length()'或'strlen()'这样的函数呢? – CanSpice 2011-05-20 22:00:04

+0

'/^.$/',但我不能相信你使用的任何语言没有更好的方式来做到这一点。 – lonesomeday 2011-05-20 22:00:18

回答

3
^.$ 

但是大多数框架都包含返回字符串长度的方法,您应该使用它来代替正则表达式。

+0

“{1}”确实是无关紧要的,只是增加了线噪音。 – CanSpice 2011-05-20 22:03:27

+0

$也可以匹配换行符,所以re会匹配“x”和“x \ n” – 2011-05-20 22:04:24

+0

@Seth在换行符之后'$'匹配的正则表达式风格是什么? OP没有提到申请。例如,在JavaScript中,'/ foo $ /。test(“foo \ n”)'返回'false'。 – Phrogz 2011-05-20 23:50:35

1

匹配单个字符将是(使用Perl正则表达式):

/\A.\z/s 

\A表示“字符串的开始”,.意味着“任何文字”,以及\z表示“字符串的末尾”。如果没有\A\z,您将匹配任何长度超过一个字符的字符串。

编辑:但真的是你应该做的是这样的:

if(length($string) == 1) { 
    ... 
} 

(使用Perl作为一个例子)

EDIT2:以前我有/^.$/但是,正如赛斯指出,这允许在最后一个字符为\n的情况下匹配长度为两个字符的字符串。 \A...\z构造修复了这个问题。

+0

列出的正则表达式匹配“x”和“x \ n” – 2011-05-20 22:07:00

+0

@祝好,我已经修复了我的回答以反映这一点。 – CanSpice 2011-05-20 22:12:59

+0

除外。除非使用/ s修饰符(在Ruby中为/ m),否则通常表示“除\ n之外的任何字符”,因此“\ n”不匹配。 – 2011-05-20 22:14:59

3

锚定到字符串的开头和结尾并匹配一个字符。在许多语言:

^.{1}$ 

在Ruby的正则表达式:

\A.{1}\z 
+0

{1}不添加任何内容。后者是正确的,而前者将匹配“x”和“x \ n”。您还需要确保。可以匹配\ n,它通常不会没有/ s修饰符(在Ruby中为/ m) – 2011-05-20 22:05:07

+2

@Seth“{1}”不会在OP提到的“例如”情况下添加任何内容,但OP要求如何测试一般的长度。我已经添加了{1}(与其他人一样),以明确如何匹配不同数量的字符。此外,“$”是否与“\ n”匹配取决于正则表达式风格。由于OP尚未指定口味,因此您的陈述不完全正确。 – Phrogz 2011-05-20 23:50:51

0
/^.\z/s 

以上需要Perl兼容的正则表达式。诀窍是/^.$/可能匹配“x”和“x \ n”。添加/ s修饰符对此没有帮助。