请在我的代码中更正我。我有一个txt文件,并包含关键字。
example
aaa
aac
aav
aax
asd
fdssa
fsdf
我创建了一个用于搜索的php文件。
<?php
$file = "myfile.txt";
if($file) {
$read = fopen($file, 'r');
$data = fread($read, filesize($file));
fclose($read);
$im = explode("\n", $data);
$pattern = "/^aa+$/i";
foreach($im as $val) {
preg_match($pattern, $val, $matches);
}
}
else {
echo $file." is not found";
}
?>
<pre><?php print_r($matches); ?></pre>
这应该返回
aac
aav
aax
它应该返回一个匹配词。如果单词左边有“aa”,则所有左边有aa的单词都会返回。我希望结果在数组中。 怎么做?请帮忙
答案 0 :(得分:2)
您的变量$matches
只会保留最后匹配尝试的结果,因为它会被每次foreach
次迭代覆盖。此外,^aa+$
仅匹配包含两个或更多a
s。
要匹配仅以aa
开头的字符串,请改用^aa
。如果你想要所有匹配的行,你需要在另一个数组中收集它们:
foreach ($im as $val) {
if (preg_match('/^aa/', $val, $match)) {
$matches[] = $match;
}
}
$matches = preg_grep('/^aa/', file($file));
答案 1 :(得分:1)
<强>代码:强>
<?php
$filePathName = '__regexTest.txt';
if (is_file($filePathName)) {
$content = file_get_contents($filePathName);
$re = '/
\b # begin of word
aa # begin from aa
.*? # text from aa to end of word
\b # end of word
/xm'; // m - multiline search & x - ignore spaces in regex
$nMatches = preg_match_all($re, $content, $aMatches);
}
else {
echo $file." is not found";
}
?>
<pre><?php print_r($aMatches); ?></pre>
<强>结果:强>
Array
(
[0] => Array
(
[0] => aaa
[1] => aac
[2] => aav
[3] => aax
)
)
它也适用于
aac aabssc
aav