2016-01-28 2 views
1

У меня есть эта строка и теперь вы хотите заменить не только точки и подчеркивание пробелом. Теперь я также заменил бы слово «немецкий» (без кавычек) пустой строкой.регулярное выражение - заменить слово пробелом

Может ли кто-нибудь помочь?

preg_replace('/\(.*?\)|\.|_/i', ' ',

Лучшие регс

Edit:

public function parseMovieName($releasename) 
     { 
$cat = new Category; 
if (!$cat->isMovieForeign($releasename)) 
     { 
preg_match('/^(?P<name>.*)[\.\-_\(](?P<year>19\d{2}|20\d{2})/i', $releasename, $matches); 
      if (!isset($matches['year'])) 
preg_match('/^(?P<name>.*)[\.\-_ ](?:dvdrip|bdrip|brrip|bluray|hdtv|divx|xvid|proper|repack|real\.proper|sub\.?fix|sub\.?pack|ac3d|unrated|1080i|1080p|720p|810p)/i', $releasename, $matches); 
      if (isset($matches['name'])) 
     { 
$name = preg_replace('/\(.*?\)|\.|_/i', ' ', $matches['name']); 
$year = (isset($matches['year'])) ? ' ('.$matches['year'].')' : ''; 
       return trim($name).$year; 
      } 
    } 
return false; 
} 

Строка, например "MovieName немецкого 2015", но выход должен быть "MovieName 2015" (без кавычек)

Решено:

Изменить сейчас линия preg_replace('/\(.*?\)|\.|_/i', ' ', $matches['name']); к $name = preg_replace('/\h*\bGerman\b|\([^()]*\)|[._]/', ' ', $matches['name']);

Спасибо @ Wiktor Stribiżew

+1

Какая у вас линия? Просто угадайте: 'str_replace ('German'," \ n ", preg_replace ('/ \ (. *? \) | \. | _/I', '', line))' –

+0

См. Мое редактирование, это целая функция. – BASF

+0

Да, но он не подлежит компиляции. Я не могу воспроизвести проблему. Таким образом, я могу только предложить использовать '$ name = str_replace ('German'," \ n ", preg_replace ('/ \ (. *? \) | \. | _/I', '', line))' вместо из '$ name = preg_replace ('/ \ (. *? \) | \. | _/i', '', $ matches ['name']);'. Если вы хотите ответить как «он не работает», пожалуйста, укажите свою строку, ваш ожидаемый результат. –

ответ

1

Чтобы добавить альтернативу чередованию группе, вам просто нужно использовать

$name = preg_replace('/\h*\bGerman\b|\([^()]*\)|[._]/', ' ', $matches['name']); 
         ^^^^^^ ^^^^^^^ 

Обратите внимание, что \h матчи горизонтальные пробельные только (без разрывов строк), если вам нужны разрывы строк, используйте \s.

\h*\bGerman\b соответствует нулю или нескольким пробелам, за которым следует целое слово «немецкий» (как \b - граница слова, слово «германское» не будет соответствовать).

Кроме того, (\.|_) равно [._] в результате соответствует этому шаблону, но персонаж класс [...] является гораздо более эффективным, когда одиночными символы.

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