2010-02-17 2 views
0

У меня возникают проблемы с созданием регулярного выражения, которое фиксирует допустимую строку.Регулярное выражение для буквенно-цифровых строк с разделителями-запятыми

Строка будет в формате: любые альфа-цифровой символ 3 до 5 раз, с последующей запятой, если есть больше символов после того, как остальное его конец строки

Пример Строки: A401, CR56,4U9Y, MO16, ECZGB, A7DC, 9LN5, D52PU, UT95, YBPB0,2JWA, AAMW, КВГ, 6V8W, FWE

TRIR, J107, Q9X, FMFZ, VDAS, 557, X7A, DRPB, S97O , 8U62B, IN3I, H8MC, WS4C, U04KQ, X05O.

Я пробовал несколько различных выражений, но ни один из них не подходит, если у меня есть недопустимая запись. Я знаю, что могу взорвать строку и перебрать массив, но пытаюсь сделать это только в одном выражении, поскольку это кажется довольно простым, но не может понять это.

Exmaple модели:

echo preg_match("/^([A-Z0-9]{3,5})[,|$]{1,}/",$str); 
echo preg_match("/((?<=[^|,])([A-Z0-9]{3,5}){1}(?=[,|$])){1,}/",$str); 

и различные вариации на них, но я не могу найти достаточно выигрышный шаблон, все оцененная помощь.

Приветствия, Psy

+2

«Некоторые люди, сталкиваясь с проблемой, думаю: «Я знаю, я буду использовать регулярные выражения». Теперь у них есть две проблемы ». –

+4

«И некоторые люди, столкнувшись с регулярными выражениями, думают:« Я знаю, я буду использовать броскую цитату, которую я помню ». Теперь они ничего не добавили к обсуждению». '- Tomalak' –

+0

И многие люди с нетерпением ждут заданий регулярного выражения, которые будут заданы на SO, что, когда вопрос наконец задан, в течение 40 секунд есть 4-5 ответов :) – Amarghosh

ответ

2
/^[A-Z0-9]{3,5}(?:,[A-Z0-9]{3,5})*$/ 
+0

Немного излишней избыточности. – brianary

2
/^([a-z0-9]{3,5},)*[a-z0-9]{3,5}$/ 
+0

Забавно, как умы работают по-другому: у меня был такой же, как у KennyTM, но вы решили поместить одиночный '[a-z0-9] {3,5}' вправо (отлично, конечно, конечно). +1 для вас обоих. –

-1

Try:

echo preg_match("/^([A-Z0-9]{3,5}(?:,|$))+/",$str); 
+0

'[, | $]' соответствует запятой, вертикальной полосе или знаку доллара. Группировка по-прежнему '(?: ...)', если вы не работаете в Perl 6. – kennytm

+0

Нет, '[, | $]' соответствует либо ',', '' 'или' $'. Он не соответствует запятой ИЛИ концу строки. –

+0

Пропустил это, я просто фиксировал неправильно вложенный парик. Даже не заметил неправильные скобки. Исправлена. – brianary

0

Это работает для меня:

(\w{3,5})[,.]? 
+0

Это соответствует '___.'. – kennytm

+0

«Строка будет в формате: любой альфа-числовой символ от 3 до 5 раз, за ​​которым следует запятая, если после символа больше символов после нее конец строки». Поэтому не будет ___. Нет причин переусердствовать. – PeterM

Смежные вопросы