在正则表达式

时间:2015-11-05 22:13:12

标签: php regex

我正在尝试使用正则表达式来删除句子中的第一个和最后一个单词,但它仅在我使用空格匹配时才有效,但是当我尝试使用单词时它不起作用边界。那是为什么?

使用空格:

$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 )

2 个答案:

答案 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)

如果要删除句子中的第一个和最后一个单词,您可以:

    空间
  1. explode()
  2. 使用array_slice()
  3. 删除第一个和最后一个元素
  4. implode()再次回来
  5. <强>代码

    $inputX = "she hates my guts";
    $result = implode(" ", array_slice(explode(" ", $inputX), 1, -1));
    
    var_dump($result);
    

    <强>输出

    string(8) "hates my"