2014-12-23 52 views
1

請原諒我是RegEx的完全新手,並且之前沒有真正使用過preg_replace。簡單的preg_replace +正則表達式的問題RegEx

我試圖帶一個字符串,並用「@(username)\ n」替換任何出現的「(用戶名)說:」。由於用戶名只能有空格,字母和數字,因此我使用了[A-Za-z0-9 \ s]。但是,它不工作,我知道我做錯了什麼:

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

這是使用的preg_replace方法得當,還是有不同的方式,我應該去這件事?

+0

錯誤消息說:「無結束分隔符」/「找到」。啓用error_reporting。否則,正則表達式是正確的。但它並沒有削減「說:」部分。 – mario

+0

感謝您的信息,它的工作。這個操作是在重定向之前執行的,所以我沒有看到錯誤,也沒有預料到錯誤。 :P – 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 ='有人說:'; $ message = preg_replace(「/(。*)\ ssaid:/ Ui」,「REPLACE said:」,$ message); echo $ message;