使用以下内容在文本中查找字符串(使用PHP)的最佳/最简单方法是什么:
一些例子:
$text = "This is a test èsàdò string123?";
$find = "èsàDò";
将返回true
$text = "This is a test èsàdò string123?";
$find = "a TEST èsàdò";
将返回true
$text = "This is a test èsàdò string123?";
$find = "string123";
将返回true
$text = "This is a test èsàdò string123?";
$find = "string12";
将返回false
$text = "This is a test èsàdò string123?";
$find = "This is a test èsàdò String123?";
将返回true
答案 0 :(得分:0)
在你的'边界'/分隔符处爆炸,然后遍历数组并返回第一场比赛。
$array = explode(" ", $string);
foreach($array as $array_item){
if (stripos($array_item, 'èsàdò') !== false) {
return true;
}
}
答案 1 :(得分:0)
您可以使用像preg_match或preg_match_all
这样的正则表达式函数示例:
示例: 编辑:(感谢ThomasGhesquière在下面找到了一个工作模式)
function test($string,$pattern){
return (preg_match("/\b({$pattern})\b/ui","".trim($string)."",$res)) ? "Found" : "Not found";
}
$text = "This is a test èsàdò string123?";
$find = "èsàDò";
echo test($text,$find) . "\n";
$text = "This is a test èsàdò string123?";
$find = "a TEST èsàdò";
echo test($text,$find) . "\n";
$text = "This is a test èsàdò string123?";
$find = "string123";
echo test($text,$find) . "\n";
$text = "This is a test èsàdò string123?";
$find = "string12";
echo test($text,$find) . "\n";
$text = "This is a test èsàdò string123?";
$find = "This is a test èsàdò String123?";
echo test($text,$find) . "\n";
将返回true为false,具体取决于$ text和$ find。在这里它将返回true。 http://php.net/manual/fr/function.preg-match.php
sizrar @ ovador:〜$ php test.php
实测值
实测值
实测值
未找到
实测值
你可以看到结果几乎可以(你的最后一个例子还有一些调整,但主要原则是那里) 在这种特殊情况下,您可以轻松地排除测试函数中的相等情况。但要确定要使用的正则表达式,您可以使用en在线测试器,如:https://regex101.com/并相应地编译preg_match的第一个参数
答案 2 :(得分:0)
使用正则表达式的\b
字分隔符和u
匹配重音字符。
$text = "This is a test èsàdò string123?";
$find = "èsàDò";
// remove trailing punctuations from $find
// punctuations inside the string are not affected
$find = preg_replace('/([[:punct:]]+)$/iu', '', $find);
// escape any regex specific character
$find = preg_quote($find);
if (preg_match("/\b({$find})\b/ui", $text)) {
echo "match";
} else {
echo "no match";
}
答案 3 :(得分:0)
由于你没有定义你所谓的" boundary",我假设(从你的测试中)它意味着搜索的子串可以用空格,标点字符和字符串的限制包围。为了表达我使用负面的外观:
(?<![^\s\pP])
(不包含不是空格或标点字符的字符) (?![^\s\pP])
(后面跟不是空格或标点字符的字符) 请注意,我使用负面外观(而不是(?<=[\s\pP])
和(?=[\s\pP])
)隐式包含搜索字符串在字符串的一个限制处开始或结束的情况。换句话说:
(?<![^\s\pP])
&lt; =&gt; (?<=[\s\pP]|^)
(?![^\s\pP])
&lt; =&gt; (?=[\s\pP]|$)
代码:
$text = 'This is a test èsàdò string123?';
$needles = ['èsàDò', 'a TEST èsàdò', 'string123', 'string12', 'This is a test èsàdò String123?'];
$format = " %-35s\t%s%s";
echo 'TEST STRING: ', $text, PHP_EOL, PHP_EOL;
printf($format, 'needle', 'result', PHP_EOL);
echo str_repeat('-', 50), PHP_EOL;
foreach ($needles as $needle) {
$pattern = '~(?<![^\s\pP])' . preg_quote($needle, '~') . '(?![^\s\pP])~iu';
printf($format, $needle, (preg_match($pattern, $text) ? 'true' : 'false'), PHP_EOL);
}
结果:
TEST STRING: This is a test èsàdò string123?
needle result
--------------------------------------------------
èsàDò true
a TEST èsàdò true
string123 true
string12 false
This is a test èsàdò String123? true
答案 4 :(得分:-1)
要匹配以下任何内容:
我会调查preg_match preg_match
使用正则表达式,您可以搜索匹配特殊字符或字符串boudaries的任何字符串,如果使用i标志设置它将不区分大小写。
例如:
preg_match("/([èsàDò\b]+)/i"'This is a test èsàdò string123?',$matches)
这将检索$ matches数组中的任何匹配,或者只返回布尔值true / false:
if(preg_match("/[èsàDò\b]+/i"'This is a test èsàdò string123?')){
[CODE HERE]
}