【问题标题】:PHP regular expression to match wordsPHP正则表达式匹配单词
【发布时间】:2013-02-18 17:45:37
【问题描述】:

给定一个字符串,我想要一个包含单词的字符串数组,每个字符串前面都有任何非单词字符。

输入字符串示例:

one "two" (three) -four-

字符串中的单词可以是任何东西,甚至是乱码,带有任意数量的标点或符号。

我想看到的:

数组:
一
 “二
“ (三
) -四
-

基本上,对于每场比赛,最后一个词是一个单词,前面是前一场比赛留下的任何内容。

我将在 PHP 中使用它。我尝试了 preg_match_all() 和 preg_split() 的各种组合,其中的模式包含许多“\w”、“\b”、“[^\w]”等变体。

更大的图景

如何在字符串中的每个单词后放置 * 以进行搜索?

【问题讨论】:

  • 在您的 what I would like to see 部分中,four 之后的引用应该在下一行吗?
  • 你说得对,我发帖的时候好像改了引号,我现在已经修好了,希望这次能顺利通过。

标签: php regex


【解决方案1】:

如果您只想在每个“单词”后添加一个星号,您可以这样做:

<?php
$test = 'one "two" (three) -four-';

echo preg_replace('/(\w+)/', "$1*", $test);
?>

http://phpfiddle.org/main/code/8nr-bpb

【讨论】:

  • 这也很棒!我可能会使用这个,因为它可以让我免于随后循环匹配。
【解决方案2】:

您可以使用负前瞻来分割单词边界,如下所示:

$array = preg_split( '/(?!\w)\b/', 'one "two" (three) -four-');

print_r( $array);gives you 所需的确切输出:

数组
(
    [0] => 一
    [1] =>“两个
    [2] => "(三个
    [3] => ) -四
    [4] => -
)

【讨论】:

    【解决方案3】:

    这是一个如何在 PHP 中使用正则表达式查找单词的示例。

    <?php
        $subject = "abcdef";
        $pattern = '/^def/';
        preg_match($pattern, substr($subject, 3), $matches, PREG_OFFSET_CAPTURE);
        print_r($matches);
    ?>
    

    【讨论】:

      【解决方案4】:

      另一种选择

      [^\w]*(\b\w*\b)?
      ----- ----------
       |        |
       |        |-> Matches a word 0 or 1 time
       |-> Matches 0 to many characters except [a-zA-Z0-9_]
      

      你需要匹配!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-29
        • 2013-01-04
        • 2010-11-15
        • 2012-01-06
        相关资源
        最近更新 更多