0

因此,我在字符串中检查了一系列脏话。

例如

$string = 'naughty string';
$words = [
    'naughty',
    'example',
    'words'
];
$pattern = '/('.join($words, '|').')/i';
preg_match_all($pattern, $string, $matches);
$matched = implode(', ', $matches[0]);

但我也想检查用空格分隔的亵渎:

例如

淘气

是的,我可以通过将它添加到数组来做到这一点:

$words = [
    'naughty',
    'n a u g h t y',
    'example',
    'e x a m p l e',
    'words',
    'w o r d s'
];

但我有一大堆“坏”词,想知道是否有任何简单的方法可以做到这一点?

- - - 编辑 - - -

所以这并不意味着超级准确。对于我的应用程序,每个空格都是一个新行。所以像这样的字符串:naughty string会导致:

n

一个

G

H

是的

细绳

4

2 回答 2

1
于 2015-07-11T10:18:20.180 回答
0

将单词编码到数组中\s?以匹配可选空格,如下所示:

$words = [
    'n\s?a\s?u\s?g\s?h\s?t\s?y',
    'e\s?x\s?a\s?m\s?p\s?l\s?e',
    'w\s?o\s?r\s?d\s?s',
];

或者您可以使用\s*匹配任意数量的空格。

如果您不熟悉正则表达式的细微差别,我建议您查看https://regex101.com/

于 2015-07-11T10:21:17.557 回答