2012-02-21 154 views
0

需要正则表达式,它可以匹配像这样的字符串"1B7FL26X3WS731388"。字母数字17个字符长度。正则表达式

我正在使用这个表达式。

$rEX = '/([A-Z0-9]){17}/'; 

但它也返回一个像这样的字符串的一部分"FGD798791B7FL26X3WS731388POPOD";

我需要选择一个长度恰好为17个字符的字符串第18个字符不应该是字母数字。

+0

那表情如何正常工作。如果只在第18个字符是非字母数字时才需要匹配,则应在表达式中指定该字符。 – 2012-02-21 11:12:43

+0

谢谢大家的回复我得到了我需要的 $ rEX ='/([A-Z0-9]){17}([^ A-Za-z0-9]){1} /'; 它现在正在为我工​​作 – CoreCoder 2012-02-21 11:18:31

回答

0

$rEX = '/[^A-Z0-9]([A-Z0-9]){17}[^A-Z0-9]/';应该做的。 [^...]否定字符类。

2

添加开始和结束你的模式:

$rEX = '/^([A-Z0-9]){17}$/D'; 
0
$rEX = '/[^A-Z0-9]+([A-Z0-9]){17}[^A-Z0-9]+/'; 
0

这将做

^([a-zA-Z0-9]){17}([^a-zA-Z0-9])*$ 
+0

这将匹配“1234567890abcdefghijk ###”并将在组1中返回“567890abcdefghijk” – shift66 2012-02-21 11:16:52

1

您应该使用^ $定界符

$ REX =“/ ^([ A-Z0-9]){17} $ /';

只允许大写字母数字17长度的字符串

你的正则表达式将允许包含大写的字母数字17 lenght字符串的子字符串的所有字符串。

-1

试试这个....

<?php 
$title='1B7FL26X3WS731388'; 
$result = preg_replace("/[^a-zA-Z0-9]/", "", $title); 
echo strlen($result); 
?>