我试图从字符串中删除字符 ['-],但当字符串以"'t"开头时不会。目前代码:
$name = "'-'-''t van t der Reidjen--'-'-";
$name = preg_replace( '~(^|'s)[-'']+(?!t )('s|$)~', ' ', $name );
期望的结果:
"'-'-''t van t der Reidjen--'-'-" => "'t van t der Reidjen"
"van 't der Reidjen--'-'-" => "van t der Reidjen"
"-van - der -'- Reidjen-" => "van der Reidjen"
即,即使它以许多 [-'] 字符为前缀,它也总是在字符串的开头留下"'t",但如果在字符串开头以外的任何地方找到"t",则 "'" 将被删除。
这个怎么样:
/([-]+)|((?!'t)['])/g
在线演示
上面的解释将-
和'
分开,因为棘手的'
,然后使用展望排除文本中的't
。
(?!'t)
:负面展望未来 - 不包括't
比赛。
注意:这些字符't
的计算区分大小写。
如果我正确理解了你想要什么,这应该可以解决你的问题:
/([-]+|(?!^)[']+)'s*/g
此正则表达式将匹配任何-
一次或多次,如果由于否定的前瞻 (?!( 而未在字符串的开头,则'
一次或多次匹配。为了避免字符串中不需要的空格,特殊字符's
将在-
或'
之后匹配其中的零个或多个(*
(。
希望对您有所帮助。
$name = "'-'-''t van ----''' 't der-Reidjen--'-'-";
$name = preg_replace( "/^['-]+(?!t)/", '', $name );
$name = preg_replace( "/ ['-]+ /", ' ', $name );
$name = preg_replace( "/['-]+$/", '', $name );
$name = preg_replace( "/ '([^']) /", ' ''1 ', $name );
echo $name;
Result: 't van t der-Reidjen