在字符串php中查找特定单词

在字符串php中查找特定单词,php,Php,我在变量$row中存储了一个PHP文本。我想找出一组单词的位置,这很容易。不容易的是让我的代码识别出它找到的单词正是我要查找的单词或更大单词的一部分。有办法吗 我想获得的示例 0 17 代码: 我想要得到什么 0 17 有什么提示吗?使用: 第一个参数是regex,它几乎可以匹配任何您想要匹配的内容。但是,也有一些关于使用它来匹配HTML之类的东西 使用: 第一个参数是regex,它几乎可以匹配任何您想要匹配的内容。但是,也有一些关于使用它来匹配HTML之类的东西 与单词边界一起使用(\b)

我在变量$row中存储了一个PHP文本。我想找出一组单词的位置,这很容易。不容易的是让我的代码识别出它找到的单词正是我要查找的单词或更大单词的一部分。有办法吗

我想获得的示例

0 17
代码:

我想要得到什么

0 17
有什么提示吗?

使用:

第一个参数是regex,它几乎可以匹配任何您想要匹配的内容。但是,也有一些关于使用它来匹配HTML之类的东西

使用:

第一个参数是regex,它几乎可以匹配任何您想要匹配的内容。但是,也有一些关于使用它来匹配HTML之类的东西

与单词边界一起使用(
\b
):

这里,使用
preg_quote()
语句正确地转义用户输入,以便在正则表达式中使用它。某些字符在正则表达式语言中具有特殊含义-如果没有适当的转义,这些字符将失去其“特殊含义”,您的正则表达式可能无法按预期工作

preg\u match\u all()
语句中,我们提供以下正则表达式:

/\b$search\b/
说明:

0 18
  • /
    -起始分隔符
  • \b
    -单词边界。在大多数正则表达式方言中,单词边界是单词字符(
    \w
    )和非单词字符(
    \w
    )之间的位置
  • $search
    -转义搜索词
  • \b
    -单词边界
  • /
    -结束分隔符
在简单的英语中,它的意思是:查找给定单词的所有匹配项
some

请注意,我们还在这里使用
PREG\u OFFSET\u CAPTURE
标志。如果传递此标志,则对于发生的每个匹配,也将返回附加字符串偏移量。有关更多信息,请参阅

要获得所需的结果,只需在
$m
数组中循环并提取偏移量:

$result = implode(' ', array_map(function($arr) {
    return $arr[1];
}, $m[0]));

echo $result;
输出:

0 18
与单词边界一起使用(
\b
):

这里,使用
preg_quote()
语句正确地转义用户输入,以便在正则表达式中使用它。某些字符在正则表达式语言中具有特殊含义-如果没有适当的转义,这些字符将失去其“特殊含义”,您的正则表达式可能无法按预期工作

preg\u match\u all()
语句中,我们提供以下正则表达式:

/\b$search\b/
说明:

0 18
  • /
    -起始分隔符
  • \b
    -单词边界。在大多数正则表达式方言中,单词边界是单词字符(
    \w
    )和非单词字符(
    \w
    )之间的位置
  • $search
    -转义搜索词
  • \b
    -单词边界
  • /
    -结束分隔符
在简单的英语中,它的意思是:查找给定单词的所有匹配项
some

请注意,我们还在这里使用
PREG\u OFFSET\u CAPTURE
标志。如果传递此标志,则对于发生的每个匹配,也将返回附加字符串偏移量。有关更多信息,请参阅

要获得所需的结果,只需在
$m
数组中循环并提取偏移量:

$result = implode(' ', array_map(function($arr) {
    return $arr[1];
}, $m[0]));

echo $result;
输出:

0 18

您要查找的是带有单词边界模式的正则表达式和返回偏移量的标志()的组合

PREG\u OFFSET\u捕获

如果传递了此标志,则对于每个发生的匹配项,都会使用附加项 字符串偏移量也将被返回。请注意,这会更改 匹配到数组中的值,其中每个元素都是数组 由偏移量为0的匹配字符串及其字符串偏移量组成 在偏移量1处插入主体

我们得到这样的结果:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => some
                    [1] => 0
                )
            [1] => Array
                (
                    [0] => some
                    [1] => 18
                )
        )
)
然后在火柴上画一个圈,找出大海捞针的位置

// store the positions of the match
$offsets = array();
foreach($matches[0] as $match) {
    $offsets[] = $match[1];
}

// display the offsets
echo implode(' ', $offsets);

您要寻找的是带有单词边界模式的正则表达式和返回偏移量()的标志的组合

PREG\u OFFSET\u捕获

如果传递了此标志,则对于每个发生的匹配项,都会使用附加项 字符串偏移量也将被返回。请注意,这会更改 匹配到数组中的值,其中每个元素都是数组 由偏移量为0的匹配字符串及其字符串偏移量组成 在偏移量1处插入主体

我们得到这样的结果:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => some
                    [1] => 0
                )
            [1] => Array
                (
                    [0] => some
                    [1] => 18
                )
        )
)
然后在火柴上画一个圈,找出大海捞针的位置

// store the positions of the match
$offsets = array();
foreach($matches[0] as $match) {
    $offsets[] = $match[1];
}

// display the offsets
echo implode(' ', $offsets);

你的意思是0,18,48:)你试过带单词边界的regexp吗?试着给出
$token=“some”(即标记前后的空格)如果您只想知道该单词的位置。。。希望我答对了问题。。。如果没有,请尝试elaborate@sumitb.mdi这几乎可以完美地工作。。但是,如果标记位于字符串的开头或结尾,该怎么办?您是说0、18、48:)您是否尝试过使用单词边界的regexp?请尝试给出
$token=“some”(即标记前后的空格)如果您只想知道该单词的位置。。。希望我答对了问题。。。如果没有,请尝试elaborate@sumitb.mdi这几乎可以完美地工作。。但是如果令牌位于字符串的开头或结尾,该怎么办?答案寻求者希望
0 17
作为输出。。你能建议他如何从你的代码中得到这些吗?@Tzar:他们希望得到的输出可能是错误的
一些丑陋的s文本
-我看到第二个
s
前面有
18个
字符。也许是原来问题中的计数错误?你没抓住重点,我的朋友。。我说的是格式和显示。。需要用空格分隔的位置号。@Tzar:我觉得这很简单。无论如何,我已经更新了答案