簡體   English   中英

如何在 PHP 中使用 RegEx 去除特定的前導和尾隨標點符號

[英]How to use RegEx to strip specific leading and trailing punctuation in PHP

我們正在清理大量數據,並且發現許多干凈數據的示例在最終字符串的開頭和結尾留下了不相關的標點符號。 Quotes 和 DoubleQuotes 很好,但需要刪除前導/尾隨破折號、逗號等

我已經研究了如何刪除所有前導和尾隨標點符號的答案 ,但我無法找到在 PHP 中完成相同操作的方法。

- some text.                dash and period should be removed
"Some Other Text".          period should be removed
it's a matter of opinion    apostrophe should be kept
/ some more text?           Slash should be removed and question mark kept

簡而言之,

  • 必須刪除第一個字母數字字符之前出現的某些標點符號
  • 必須刪除最后一個字母數字字符之后出現的某些標點符號

我怎樣才能用 PHP 實現這一點——我發現的幾個例子超過了我的 RegEx/JS 能力。

這是一個沒有正則表達式的答案。

您可以使用功能trim (或ltrim / rtrim的組合來指定要刪除的所有字符。例如:

$str = trim($str, " \t\n\r\0\x0B-.");

(我想你還想在開始/結束時刪除間距和換行符,我保留了默認掩碼)

如果您不想在字符串的開頭和結尾刪除相同的字符列表,另請參閱 rtrim 和 ltrim。

您可以修改模式以包含字符。

$array = array(
    '- some text.',
    '"Some Other Text".',
    'it\'s a matter of opinion',
    '/ some more text?'
);

foreach($array as $key => $string){
    $array[$key] = preg_replace(array(
        '/^[\.\-\/]*/',
        '/[\.\-\/]*$/'
    ), array('', ''), $string);
}

print_r($array);

如果標點符號可能不止一個字符,你可以這樣做

function trimFormatting($str){ // trim 
    $osl = 0;
    $pat = '(<br>|,|\s+)';
    while($osl!==strlen($str)){
        $osl = strlen($str);
        $str =preg_replace('/^'.$pat.'|'.$pat.'$/i','',$str); 
    }
return $str;
}
echo trimFormatting('<BR>,<BR>Hello<BR>World<BR>, <BR>'); 

// will give "Hello<BR>World"

該例程檢查“<BR>”和“,”以及一個或空格(“\\s+”)。 “|” 作為 OR 運算符在例程中使用了 3 次。 它同時在開頭“^”和結尾“$”處進行修剪。 它不斷循環直到沒有更多的匹配被剪掉(即字符串長度不再減少)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM