2014-12-23 2 views
1

Прошу простить за то, что я полный новичок в RegEx и до сих пор не использовал preg_replace.Проблемы с простым preg_replace + RegEx

Я пытаюсь взять строку и заменить любые вхождения "(имя пользователя)": "с" @ (имя пользователя) \ n ". Поскольку имена пользователей могут иметь только пробелы, буквы и цифры, я использовал [A-Za-z0-9 \ s]. Тем не менее, он не работает, и я знаю, что я сделал что-то неправильно:

$message = preg_replace("/([A-Za-z0-9\s]*) said:", "@$0\n", $message);

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

+0

В сообщении об ошибке говорится: 'Без конечного разделителя '/' found'. Включить error_reporting. В противном случае регулярное выражение будет правильным. Однако он не вырезает часть 'said:'. – mario

+0

Спасибо за информацию, это сработало. Эта операция выполнялась прямо перед перенаправлением, поэтому я не видел ошибки и не ожидал ее. :П – Allen

ответ

0

Вы были очень близки к ответу. Основная проблема заключается в отсутствии end delimiter (/). Ниже регулярное выражение, которое я бы рекомендовал:

<?php 
$string = '(username) said:'; 
$string = preg_replace('#(\([A-Za-z0-9\s]+\)) said:#',"@$1\n", $string); 
echo $string; 
?> 

Я также использовал + вместо *, как плюс означает, что символы должны произойти один или несколько раз (вместо 0 или более раз). $ 0 будет соответствовать всему шаблону поиска (включая слово), но вы просто хотели сопоставить имя пользователя, которое является группой в круглых скобках, поэтому я использовал $ 1. Я также избежал скобок как \(\), так как ваш пример имеет имя пользователя в скобках.

0

$ message = 'some said:';

$ message = preg_replace ("/ (. *) \ Ssaid:/Ui", "REPLACE said:", $ message); echo $ message;

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