2010-03-10 3 views
1

У меня есть строкаКак разбить и заменить строку?

$str = 'abcde-da__123123213.xef'; 
$str2 = 'asdfasd__2342352353.gff'; 
$str3 = 'twethe__3242323423.pig'; 

Я хочу, чтобы заменить что-нибудь следующее __ (2 подчеркиванием) и перед. (точка) с новой строкой (числом). Например, приведенное выше значение $str изменяется на «abcde-da__23235239.xef».

Одним из способов является

$temp = explode('.', $str); 
$temp2 = explode('__', $temp[0]); 

и

$new_str = $temp2[0].'__'.time().'.'.$temp[1]; 

Но я думаю, если я мог бы использовать preg_replace, но вместо этого я AINT очень хорошо regexs

я пытался preg_replace ('/__(.*)/', time(), 'abcde-da__123123213.xef');

вы можете помочь написать это регулярное выражение или любой другой более простой способ?

Благодаря

ответ

4
preg_replace('/(?<=__)([^.]+)(?=\.)/e','dosomething($1)',$str) 

(?<=__) - LookBehind expression to match __ 
([^.]+) - Actual Match Part - match any characters except dot . 
(?=\.) - LookAhead expression to match . 

e в /e позволяет использовать PHP коды заменить часть, DoSomething() может быть какие-либо функции, такие как, time(), strtoupper(), $1 будет строка матч между __ и .

Для получения дополнительной информации о регулярных выражениях, пожалуйста, взгляните на regular-expressions.info

+0

Как насчет объяснение того, что это делает. Парень не понимает регулярное выражение, так что это будет полезно для него. –

+0

Отлично .. он работает, и я могу получить нужную строку .. но часть регулярного выражения просто перевернута: D .. – user187580

1

Это re gex проще: /.*?__(.*?)\..*/

".*" = абсолютно ничего. «?» что следует означает не быть жадными, что приводит к .*? соответствию всем до __

«__» не имеет никакого значения в регулярном выражении, так что это соответствует буквально

«(.*?)» снова означает соответствие всем, кроме дона Не будь жадным. Это будет соответствовать номерам

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

".*" соответствовать всем. Мы можем быть жадным здесь, потому что мы мимо части мы заботимся о

Итак ...

«.*?__» соответствует всем перед номером, и «\..*» соответствует всем после того, как

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