什么是与字母数字16字符串完全匹配的正则表达式?

时间:2015-05-20 17:33:57

标签: regex

这是我需要使用的正则表达式字符串,但我只希望它匹配16个字母数字字符而不是16个字符串。

[A-Z]{6}[0-9]{2}[A-E,H,L,M,P,R-T][0-9]{2}[A-Z0-9]{5}

它匹配这个:PLDTLL47S04L424TMRTMTT25D09F205Z完美但我不希望它匹配的是这样的粗体,在这个长字符串的中间:

  

FA4127E57FE52E49BC1的 FEEECC32E1246530 EE1C@BL2PRD9301MB014.024d.mgd.msft.net

提前致谢!

6 个答案:

答案 0 :(得分:1)

你没有说你正在使用哪种正则表达式,但问题是你缺少了开始和结束锚点。

^$添加到您的正则表达式中:

^[A-Z]{6}[0-9]{2}[A-E,H,L,M,P,R-T][0-9]{2}[A-Z0-9]{5}$

^表示在字符串的开头匹配,或者在多行模式下的任何换行符后的点。

$表示相反:字符串的结尾,或多行模式中换行符之前的点。

答案 1 :(得分:1)

除了我的前任: 假设你想匹配当且仅当行以与你的模式匹配的东西开始时,anchor ^和word boundary \ b都可以。 但是,使用锚$和/或\ b结束模式是考虑到假设一条线以匹配的东西开头,不正确。

查看一些示例代码:

// To save data in shared preference

import android.preference.PreferenceManager;
....

// Set the value of user name in login activity
SharedPreferences settings = 
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = settings.edit();
editor.putString("username", username);
editor.commit();

// Reading from SharedPreferences
// Use this code to display user name in Second Activity

PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = settings.edit();
String userName = editor.getString("username", "");

//Remove shared preference
// When you want to close the session use this code
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = settings.edit();
editor.remove("username");

生成输出:

#!/usr/bin/perl -w

my @tests = qw/
   AAAAAA00A00AAAAA49BC1FEEECC32E1246530EE1C@BL2PRD9301MB014.024d.mgd.msft.net
   0AAAAAA00A00AAAAA49BC1FEEECC32E1246530EE1C@BL2PRD9301MB014.024d.mgd.msft.net
/;

foreach my $test (@tests){
  if ( $test =~ /^([A-Z]{6}[0-9]{2}[A-EHLMPR-T][0-9]{2}[A-Z0-9]{5})/ ) {
    print "$1 matches\n";
  } else {
    print "NO MATCH\n";
  }
}

如果您将模式更改为

marc:tmp marc$ perl test.pl
AAAAAA00A00AAAAA matches
NO MATCH

结果是:

  if ( $test =~ /^([A-Z]{6}[0-9]{2}[A-EHLMPR-T][0-9]{2}[A-Z0-9]{5}$)/ ) {

答案 2 :(得分:0)

您可以为此目的使用单词边界\b

\b[A-Z]{6}[0-9]{2}[A-E,H,L,M,P,R-T][0-9]{2}[A-Z0-9]{5}\b
 ^                                                     ^

编辑:字词边界,但不会启动^和结束$锚定,因为我假设你只是想避免匹配作为子字符串而你的模式更像是你的示例字符串,但带有空格

答案 3 :(得分:0)

您可以使用Boundry Matchers来匹配行,字符串,单词或其他内容的开头和结尾。什么是可用的取决于你的正则表达的味道。字符串/输入匹配器的开始和结束非常普遍。

^[A-Z]{6}[0-9]{2}[A-E,H,L,M,P,R-T][0-9]{2}[A-Z0-9]{5}$

再次根据您正在使用的正则表达式的风格,您还可以使用POSIX字符类来匹配使用\p{Alpha}\p{Digit}的字母数字。这将简化你的正则表达式。

答案 4 :(得分:0)

你应该使用^和$绑定正则表达式

答案 5 :(得分:-2)

你可以试试这个正则表达式:^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+){16}$