2013-03-11 2 views
0

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

58158 
60360 
98198 

То есть в формате ABCAB.

Я использую ниже код, чтобы соответствовать ABAB:

(([\d]){1,}([\d]){1,})\1{1,} 

5858, такие как, но как соответствовать ABCAB (58158)?

ответ

4

Для чисел в формате ABCAB:

(\d)(\d)\d\1\2 

Это не накладывает никаких ограничений на A=B=C. Используйте negative look-ahead для A!=B!=C:

(\d)(?!\1)(\d)(?!\1|\2)\d\1\2 

Edit:

Там нет границы соответствия так 58158 будет сопоставляться в 36958158:

$num=36958158; 
preg_match('/(\d)(?!\1)(\d)(?!\1|\2)\d\1\2/',$num,$match); 
echo ">>> ".$match[0]; 

>>> 58158 
+0

Привет, я имею в виду эти цифры в формате ABCAB. – jlee

+0

@jlee Почему вы хотите использовать регулярное выражение для этого? Просто разделите и сравните фрагменты обычным способом, как вы это сделаете, используя стандартную библиотеку вашего языка. – viraptor

+0

Форматирование @jlee и некоторые объяснения идут по пути. Может ли «A = B = C» здесь? –

0

Чтобы соответствовать целых чисел в виде ABCAB, использование \b(\d\d)\d(\1)\b.

\b - граница слова и \1 ссылки первой группы.

Пример (в JavaScript, так что он может быть проверен в браузере, но он работает в большинстве регулярных выражений решений):

var matches = '58158 22223 60360 98198 12345'.match(/\b(\d\d)\d(\1)\b/g); 

дает

["58158", "60360", "98198"] 
+0

Я использую его в php. – jlee

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

  • Нет связанных вопросов^_^