繁体   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