2015-04-02 3 views
0

Я пытаюсь соответствовать строке, как это:Regular Expression 3 алфавитов следуют один пробел следуют одна цифра

ABC 123 

Я попытался использовать это регулярное выражение в моем PHP код:

preg_match('/^[A-Z]{3}[ ]{3}[0-9]{3}&/', $class_code) 

, но это, кажется, соответствует даже строки, как это одна:

ABC jsfdkajf 123 

это должно дать ложные для этой строки, но это дает MATC час Что я делаю не так?

+0

амперсанд '&' в в конце должен быть знак доллара '' '. –

ответ

0

Это Regex должно работать для вас:

^\w{3}\s?\d{3}$ 

пример кода:

<?php 

    $str = "ABC jsfdkajf 123"; //"ABC 123" 
    if(!preg_match('/^\w{3}\s?\d{3}$/', $str)) 
     echo "no "; 
    echo "match"; 

?> 

выход:

no match //match 

REGEX объяснение:

^\w{3}\s?\d{3}$ 
  • ^ позиции утверждают в начале строки
  • \ ш {3} матч любое слово символ [A-Za-z0-9_]
    • Квантор: {3} Ровно 3 раз
  • \ s? соответствует любому символу пробела [\ r \ n \ t \ f]
    • Квантификатор: ? между нулем и единицей времени, столько раз, сколько это возможно, отдавая по мере необходимости [жадный]
  • \ д {3} матч цифра [0-9]
    • Квантор: {3 } Ровно 3 раза
  • $ позиции утверждают в конце строки

Полезные REGEX ссылки:

0

Проблема с регулярным выражением является то, что вы хотите, чтобы соответствовать точно 3 места, но у вас есть только 1 в ABC 123 ,

В PHP вы можете использовать наборы символов Юникода, я бы пошел с ними.

Regex: ^\p{Lu}{3}\p{Zs}+\p{N}{3}$

  • ^ - Начало линии
  • \p{Lu}{3} - три прописные буквы
  • \p{Zs}+ - любое количество пробелов (корректировать по мере необходимости, а также включает в себя пространство на жестком)
  • \p{N}{3} - Три цифры точно
  • $ - конец линии

Вот пример PHP код:

$re = "/^\p{Lu}{3}\p{Zs}+\p{N}{3}$/"; 
$str = "ABC 123"; 
preg_match_all($re, $str, $matches); 
print_r($matches[0]); 

Выход and a link to a sample program:

[0] => ABC 123 
0

Для вашего регулярного выражения, вы должны изменить:

preg_match('/^[A-Z]{3}[ ]{3}[0-9]{3}&/', $class_code) 

Для

preg_match('/^[A-Z]{3}[ ][0-9]{3}$/', $class_code) 
           ^--- use this instead & 

Btw, вы можете использовать регулярные выражения, как это:

^[A-Za-z]{3} \d{3}$ 

Regular expression visualization

Или используя нечувствительным флаг:

^[a-z]{3} \d{3}$  

Working demo

$re = "/^[a-z]{3} \\d{3}$/mi"; 
$str = "ABC 123\nABC 1\n"; 

preg_match_all($re, $str, $matches); 

Другое наблюдение состоит в том, что вы вывесили «3 алфавитов следуют один пробел, затем на одну цифру», так что если вы хотите только один цифры в конце вы можете использовать:

^[A-Za-z]{3} \d$ 
Смежные вопросы