2016-07-14 55 views
-3

我正在處理存儲在變量$title中的UTF8編碼的文本內容。如何使用PHP匹配字母數字和符號?

使用preg_replace,我該如何添加一個額外的空間,如果$title字符串結尾:

  • 大/小寫字符
  • 位數
  • 符號,例如。 ?!
+0

從技術上講,你想在每一個字符串的結尾添加一個空格? –

+0

定義*符號* ...你有很多選項可以用utf8進行選擇。 – CD001

+0

你需要的是'/ u'修飾符。其餘的不清楚。 –

回答

2

這應該做的伎倆:

preg_replace('/^(.*[\w?!])$/', "$1 ", $string); 

在本質上它的作用是如果在字符串中的一個結束的不需要的字符會附加一個空格。

如果字符串與模式不匹配,則preg_replace()會返回原始字符串 - 所以您仍然很好。

如果您需要擴大您不需要的結局的列表,你可以只添加他們進入字符塊[\w?!]

2

使用該線的端部之前的正反向預搜索。
並用空格替換。

$title = preg_replace('/(?<=[A-Za-z0-9?!])$/',' ', $title); 

試試吧here

+0

它給了我一個警告:preg_replace():未知修飾符'$' – KDX

+1

本來我沒有用正斜槓包圍正則表達式。現在它可以工作。 – LukStorms

1

你可能想嘗試這種模式下面匹配,看看是否會爲你。

<?php 
    // THE REGEX BELOW MATCHES THE ENDING LOWER & UPPER-CASED CHARACTERS, DIGITS 
    // AND SYMBOLS LIKE "?" AND "!" AND EVEN A DOT "." 
    // HOWEVER YOU CAN IMPROVISE ON YOUR OWN 
    $rxPattern = "#([\!\?a-zA-Z0-9\.])$#"; 
    $title  = "What is your name?"; 
    var_dump($title); 

    // AND HERE, YOU APPEND A SINGLE SPACE AFTER THE MATCHED STRING 
    $title  = preg_replace($rxPattern, "$1 ", $title); 
    var_dump($title); 

    // THE FIRST var_dump($title) PRODUCES: 
    // 'What is your name?' (length=18) 

    // AND THE SECOND var_dump($title) PRODUCES 
    // 'What is your name? ' (length=19) <== NOTICE THE LENGTH FROM ADDED SPACE. 

您可以測試一下HERE

乾杯......

0

你需要

$title=preg_replace("/.*[\w?!]$/", "\\0 ", $title); 
相關問題