我正在尝试使用正则表达式来删除句子中的第一个和最后一个单词,但它仅在我使用空格匹配时才有效,但是当我尝试使用单词时它不起作用边界。那是为什么?
使用空格:
$inputX = "she hates my guts";
preg_match("~ .+ ~i", $inputX, $match);
print_r($match);
结果:
Array ( [0] => hates my )
使用Word Boundary:
$inputX = "she hates my guts";
preg_match("~\b.+\b~i", $inputX, $match);
print_r($match);
结果:
Array ( [0] => she hates my guts )
答案 0 :(得分:1)
以下是单词边界:
s h e h a t e s m y g u t s
^ ^ ^ ^ ^ ^ ^ ^
所以你的模式匹配如下:
s h e h a t e s m y g u t s
^\_______________________________/^
| | |
\b .+ \b
如果你想摆脱第一个和最后一个字,我只需用空字符串替换它们,使用以下模式:
^\W*?\w+\s*|\s*\w+\W*$
两个\W*
都可以说明可能的标点符号(例如she hates my guts.
),但如果不需要,则可以删除它们。
答案 1 :(得分:0)
如果要删除句子中的第一个和最后一个单词,您可以:
explode()
array_slice()
implode()
再次回来<强>代码强>
$inputX = "she hates my guts";
$result = implode(" ", array_slice(explode(" ", $inputX), 1, -1));
var_dump($result);
<强>输出强>
string(8) "hates my"