2012-04-24 1 views
0

Im неохотно спрашивает, но я не могу вычислить php preg_replace и игнорировать некоторые кусочки жало.php preg_replace frustration

$string = '2012042410000102'; 

$ строка должна выглядеть _0424_102

Цифры, демонстрирующая изменчивы постоянно меняется и 2012 изменения когда-либо год

что я пробовал:

^\d{4}[^\d{4}]10000[^\d{3}]$ 
^\d{4}[^\d]{4}10000[^\d]{3}$ 

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

Благодаря

+1

По сути, вы хотите, чтобы заменить первые четыре цифры и «10000» с подчеркиванием? – Wiseguy

+0

Если вы пишете '[^ \ d]', это означает совпадение не десятичных знаков. – mario

+0

@Wiseguy yup that's all – knittledan

ответ

1

Попробуйте следующее:

^\d{4}|10000(?=\d{3}$) 

Это будет соответствовать либо первые четыре цифры в строка или строка «10000», если перед «10000» есть три цифры до конца строки.

Вы бы использовать его как это:

preg_replace('/^\d{4}|10000(?=\d{3}$)/', '_', $string); 

http://codepad.org/itTgEGo4

+0

как бы вы сделали два разделителя? пробел для первой части 2012 года и _ для 100000? – knittledan

+0

@knittledan - для этого вам, вероятно, понадобится использовать что-то вроде решения Kolink, где вы сопоставляете всю строку и используете группы захвата, чтобы сохранить фрагменты, которые вы не хотите удалять. –

3

Ваш первый регулярное выражение ищет:

  • начала строки
  • Четыре цифры (год)
  • Любой символ, который не является цифрой, ни {или}
  • Номер 10000
  • Любой символ, который не является цифрой, ни {или}
  • Конец строки

Ваше второе регулярное выражение ищет:

  • начала строки
  • Четыре цифры (год)
  • Любые четыре символа Ослабляет, которые не являются цифры
  • Номер 10000
  • Любые три символа, которые не являются цифры
  • Конец строки

Регулярное выражение вы ищете это:

^\d{4}(\d{4})10000(\d{3})$ 

И замена должна быть:

_$1_$2 

Это регулярное выражение ищет:

  • начала строки
  • Четыре цифры (год)
  • Захват четыре цифры (месяц и день)
  • номер 10000
  • Захват трех цифр (102 в конце вашего примера)
  • Конец строки
+0

Спасибо за объяснение – knittledan

0

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

sprintf('_%s_%s', substr($string,4,4), substr($string,13)) 

или

'_' . substr($string,4,4) . '_' . substr($string,13)