在文本文件中搜索值并返回其后的所有内容

时间:2018-05-22 14:07:21

标签: php regex

我有一个变量$name = 'my.name';

我有一个名为people.txt的文本文件,其中包含以下内容:

my.name@mysite.com|
my.friend@othersite.com|
my.enemy@anothersite.com|

我希望能够使用该变量基本上搜索文本文件的内容并返回值mysite.com。所以基本上,无论是在管道之前的my.name之后。

到目前为止,这是我的剧本:

$file = "people.txt";
$searchfor = 'my.name';

// the following line prevents the browser from parsing this as HTML.
header('Content-Type: text/plain');

// get the file contents, assuming the file to be readable (and exist)
$contents = file_get_contents($file);
// escape special characters in the query
$pattern = preg_quote($searchfor, '/');
// finalise the regular expression, matching the whole line
$pattern = "/^.*$pattern.*\$/m";
// search, and store all matching occurences in $matches
if(preg_match_all($pattern, $contents, $matches)){
   echo "Found matches:\n";
   echo implode("\n", $matches[0]);
}
else{
   echo "No matches found";
}

3 个答案:

答案 0 :(得分:1)

您正在寻找文字$\$删除反斜杠,您应该很好。

具有相同结果的替代模式可能是:

\b$pattern[\s\S]*

答案 1 :(得分:1)

使用以下方法:

$search_for = 'my.name';

$pattern = sprintf('/\b%s@([^|\s]+)\|/m', preg_quote($search_for));

if (preg_match_all($pattern, $contents, $matches)) {
   echo "Found matches:\n";
   echo implode("\n", $matches[1]);
} else {
   echo "No matches found";
}

当前输入片段的输出:

Found matches:
mysite.com

答案 2 :(得分:0)

$pattern = "/^.*$pattern@([^|]+\)|/m";

[^|]+表示任何字符,至少一次(+),但不是|

\|转义|,因为它在此上下文中有意义

()是一个捕获组,可让您稍后在$matches中引用捕获的值。由于您使用preg_match_all,因此$matches[1]可以使用第一个捕获组(以及唯一一个)的所有匹配项。