如果你也想沒有在開始/結束多餘的空格,試試這個:
$str = ':):)test:)test:)test:) :) test:p:) test';
$codes = array(
':)', ':p', // Add smileys here.
);
// We build the $regexp automatically
$regexp = array();
foreach($codes as $smiley)
$regexp[] = preg_quote($smiley, '#');
$regexp = implode('|', $regexp);
// Afterwards, we might replace the above with $regexp = 'VERYCOMPLICATEDSYNTAX';
// Split the string at smileys, trimming the smileys as we go,
// and returning an array of smiley-and-non-smiley parts, except for empty ones
$parts = preg_split("#\s*($regexp)\s*#", $str, -1,
PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
// The new delimiter is a single space.
$str = implode(' ', $parts);
請注意,我用的空白匹配\s
而不是字面空間;如果您在原始字符串中有換行符,這可能會產生不想要的結果。如果是這種情況,請將「\s
」替換爲「」字面空格。
正則表達式。學習它們,享受它們,並發現在一行'preg_replace'中很容易做到這一點 – Prinzhorn
我之前曾試着用preg_replace()來做這件事,但是由於某種原因它沒有工作。你能幫我在這裏嗎? – Erik
@Prinzhorn我試着'$ text = preg_replace('/([^]):\\)([^])/ i','$ 1 :) $ 2',$ text)',但不起作用。任何想法它有什麼問題嗎? – Erik