【问题标题】:Search txt file not finding full word搜索txt文件没有找到完整的单词
【发布时间】:2013-08-20 22:51:44
【问题描述】:

我正在尝试在 PHP 脚本中运行一个简单的搜索,但我无法找出问题所在。
我正在 txt 文件中搜索单词“James”,我知道它在其中,但是我没有得到任何结果。
但是,如果我将“/James/”替换为“/J/”,我会得到我应该得到的结果。
我将把txt文件的内容粘贴到代码下面

<?php
$lines = file('ServicesResults.txt');
$lines_two = preg_grep("/James/", $lines);

foreach($lines_two as $name){
    echo "$name<br>";   
}
?>

-----txt文件内容-----
布雷安娜打招呼
乔打招呼
史蒂文打招呼
林恩打招呼
莱恩打招呼
詹姆斯打招呼

-----搜索“/J/”的结果 -----
乔打招呼
詹姆斯打招呼

----没有搜索“/James/”的结果----

----没有搜索到“/Ja/”的结果----

对不起,这似乎是一个非常愚蠢的问题,我只是无法弄清楚我做错了什么

谢谢大家 詹姆斯

【问题讨论】:

  • strpos 应该用于简单地在字符串中查找字符串
  • 你现在想好怎么做了吗,下面有hakre's的答案和我的cmets?

标签: php search text


【解决方案1】:

希望有hakre's加持,已经想出如下解决方案:

您需要使用file_get_contents() 函数才能使用hakre's code below

(已测试)

假设在 ServicesResults.txt 文件中:

-----txt文件内容-----
布雷安娜打招呼
乔打招呼
史蒂文打招呼
林恩打招呼
莱恩打招呼
詹姆斯打招呼

使用/James/ 将返回James says hello
使用 /Ja/ 将返回 James says hello
使用/J/ 将返回Joe says hello James says hello

PHP

<?php

$text = file_get_contents('ServicesResults.txt');

$lines = explode("\n", $text);

$lines_two = preg_grep("/Ja/", $lines); // modify as required

foreach($lines_two as $name){
    echo "$name\n";   
}

全部功劳归hakre

【讨论】:

  • 好的,我弄清楚发生了什么。
    我正在尝试让 powershell 通过电子邮件发送信息,我使用的 txt 文件是由 powershell 生成的,为了测试我替换了所有带有简单信息的 txt 文件的内容(詹姆斯说地狱等)
    如果我通常创建一个黑色 txt 文件,则代码可以正常工作,但是如果它是从 powershell 生成的,那么代码的行为与我描述的一样。
    我仍然不知道手动创建 txt 文件和使用 powershell 之间有什么区别,但这似乎是问题所在。非常感谢大家的帮助
  • @user2701631 好的,很高兴它成功了。如果您想单击左侧的复选标记,将作为已接受的答案,并且您的问题将不再保留为“未回答”。干杯:)
  • @Fred-ii:不,他不需要使用 file_get_contents。他只需要明白,以他的问题中提供的数据,这是无法复制的。这与特定功能或给出的代码无关。问题在于 OP 不清楚问题到底出在哪里,更重要的是,目前关于 SO 的演示文稿完全位于该主题的错误位置。但失败始终是一种选择,所以可能让 OP 独自处理问题并给它一些时间。大多数问题都会随着时间的推移而解决。
  • @hakre 我理解并同意你 100%。失败后总有成功。
【解决方案2】:

您的问题确实有点愚蠢(请不要冒犯),因为您所拥有的只是有效:

<?php

$text = <<<BUFFER
Breanna says hello 
Joe says hello
Steven says hello
Lyn says hello
Len says hello
James says hello
BUFFER;

$lines = explode("\r\n", $text);

$lines_two = preg_grep("/James/", $lines);

foreach($lines_two as $name){
    echo "$name\n";   
}

演示:https://eval.in/private/f5bdf0fdfdb55d;程序输出:

James says hello

因此,无论您认为问题出在哪里/在哪里,您都不会专门询问它。提供的信息不允许重现您的问题。我只是从你的问题中复制并粘贴了这个。

【讨论】:

  • 这很奇怪,我得到了 “Breanna 说你好 Joe 说你好 Steven 说你好 Lyn 说你好 Len 说你好 James 说你好” 作为输出。 (PHP 5.4)
  • @Fred -ii-:是的,很可能是因为爆炸键。你需要在那里有"\n"
  • 我以为你的代码只会输出 James says hello 而不是 $text 中的全部内容
  • 是的,点击演示链接看看它是如何工作的。您需要将代码示例保存为以 CRLF 作为行分隔符的文件格式(Windows)。
  • 啊,是的,我现在明白了,谢谢。我的(preverbial)附加信息腰带上的另一个缺口,干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
  • 2021-03-17
相关资源
最近更新 更多