很多时间没有在网上找到一些示例之后,我来到这里...所以,我正在使用以下代码查找确切的单词:
preg_match("/\b".$searched."\b/i", file_get_contents("mytextfile1.txt"))
这对字母/字符正常工作,但是当我使用nuber作为005、087、172时,IF条件始终返回FALSE ...,下面是两个示例:
工作示例:
$searched = "someword";
if ( preg_match("/\b".$searched."\b/i", file_get_contents("mytextfile1.txt")) ) {
// TRUE
}
非工作示例:
$searched = "047";
if ( preg_match("/\b".$searched."\b/i", file_get_contents("mytextfile1.txt")) ) {
// FALSE
}
.TXT文件包含许多这样的字符串:
somenametofind|alinktoimages_icon_047_00.png|some-text
请,您能告诉我该正则表达式有什么问题吗?我该如何解决呢? 希望您能理解我的问题...非常感谢。 :)
答案 0 :(得分:3)
您的问题是\b
匹配任何非单词字符,即[^A-Za-z0-9_]
。请注意,_
被认为是文字字符,因此\b047\b
将不匹配_047_
。如果要从“单词”中排除_
,请将正则表达式更改为
"/(^|[^A-Za-z0-9])$searched([^A-Za-z0-9]|$)/i"
如果要允许单词包含_
,则在搜索数字时更改边界可能会更简单。例如:
$string = 'somenametofind|alinktoimages_icon_047_00.png|some-text';
$searched = array("some-text", "047");
foreach ($searched as $s) {
$b = is_numeric($s) ? '\D' : '\b';
if (preg_match("/$b$s$b/i", $string) ) {
echo "found $s\n";
}
}
输出:
found some-text
found 047