Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匹配单词的PHP正则表达式_Php_Regex - Fatal编程技术网

匹配单词的PHP正则表达式

匹配单词的PHP正则表达式,php,regex,Php,Regex,给定一个字符串,我需要一个包含单词的字符串数组,每个字符串前面都有任何非单词字符 输入字符串示例: array: one "two " (three ) -four - 1“2”(3)-4- 字符串中的单词可以是任意数量的标点符号或符号,甚至是胡言乱语 我想看到的: array: one "two " (three ) -four - 数组: 一 “两个 “(三 )-四个 - 基本上,对于每一场比赛,最后一件事是一个单词,前面是上一场比赛遗留下来的任何东西 我将在PHP中使用它。我尝试了pr

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

输入字符串示例:

array: one "two " (three ) -four -
1“2”(3)-4-

字符串中的单词可以是任意数量的标点符号或符号,甚至是胡言乱语

我想看到的:

array: one "two " (three ) -four - 数组: 一 “两个 “(三 )-四个 - 基本上,对于每一场比赛,最后一件事是一个单词,前面是上一场比赛遗留下来的任何东西

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

大局


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

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

$array = preg_split( '/(?!\w)\b/', 'one "two" (three) -four-');
A
print\u r($array)所需的精确输出:

Array ( [0] => one [1] => "two [2] => " (three [3] => ) -four [4] => - ) 排列 ( [0]=>一个 [1] =>“两个 [2] =>“(三 [3] =>)-4个 [4] => -
) 下面是一个如何在PHP中查找带有正则表达式的单词的示例

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

如果您只想在每个“单词”后添加星号,可以执行以下操作:

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

echo preg_replace('/(\w+)/', "$1*", $test);
?>
另一种选择
[^\w]*(\b\w*\b)?
----- ----------
|        |
||->匹配一个单词0或1次
|->将0匹配到除[a-zA-Z0-9]之外的许多字符

你需要匹配

在你的“我想看的部分”中,
four
之后的引号应该在下一行吗?你是对的,这些引号在我发布时似乎被修改了,我现在已经修复了,希望他们这次能正确通过。这也非常有效!我可能会使用这个,因为它避免了我随后在比赛中循环。