0

txtファイルを検索して結果を表示するPHPファイルがあります。

ただし、単語が大文字のテキストで書かれており、ユーザーが小文字で同じ単語を検索すると、PHP ファイルは一致が見つかりませんでした1 と表示します。

例えば:

txt ファイルに Apple Juice があります。ユーザーはリンゴ ジュースを検索します。PHP は、大文字を含むまったく同じ単語「Apple Juice」を探しているため、一致が見つからないことを示しています。

これは私のコードです:

<html>
<head><title>some title</title></head>
<body>

<?php
    if(!empty($_POST['search'])) {
    $file = 'mytxtfile.txt';
    $searchfor = '';
    // the following line prevents the browser from parsing this as HTML.
    header('Content-Type: text/plain');
    $searchfor = $_POST['search'];
    $contents = file_get_contents($file);
    $pattern = preg_quote($searchfor, '/');
    $fullword = '\b\Q' . $w . '\E\b';
    $regex = '/' . $fullword . '(?!.*' . $fullword . ')/i';
    $pattern = "/^.*$pattern.*\$/m";
    if(preg_match_all("/\b([a-z]+[A-Z]+[a-zA-Z]*|[A-Z]+[a-z]+[a-zA-Z]*)\b/", $pattern, $contents, $matches)){
       echo "Population: \n";
       echo implode("\n", $matches[0]);

    }
    else{
       echo "No matches found";
    }
    header('Content-Type: text/html');
    }
?>

  <form method="post" action="">
    <input type="text" name="search" />
    <input type="submit" name="submit" />
  </form>

</body>
</html>

if(preg_match_all("/\b([a-z]+[A-Z]+[a-zA-Z]*|[A-Z]+[a-z]+[a-zA-Z]*)\b/",これをコードに追加しようとしましたが、うまくいきませんでした!

任意の助けをいただければ幸いです。

ありがとう

4

2 に答える 2

1

次のように正規表現パターンを変更します。

// The "i" at the end is to make a case-insensitive search
$pattern = "/^.*$pattern.*\$/mi";
于 2013-08-12T02:49:11.733 に答える
1

調整したソースはこちら。これにより、検索文字列とファイルの内容が小文字に設定されます。また、HTML ヘッダーを下に移動し、検索ロジック中に出力バッファーを開始しました。

<?php
ob_start();
if(!empty($_POST['search'])) {
$file = 'mytxtfile.txt';
$searchfor = '';
// the following line prevents the browser from parsing this as HTML.
header('Content-Type: text/plain');
$searchfor = strtolower($_POST['search']); #LOWER CASE THE SEARCH STRING TO
$contents = strtolower(file_get_contents($file)); #MAIN ADDITION TO MAKE IT LOWER CASE
$pattern = preg_quote($searchfor, '/');
$fullword = '\b\Q' . $w . '\E\b';
$regex = '/' . $fullword . '(?!.*' . $fullword . ')/i';
$pattern = "/^.*$pattern.*\$/m";
if(preg_match_all("/\b([a-z]+[A-Z]+[a-zA-Z]*|[A-Z]+[a-z]+[a-zA-Z]*)\b/", $pattern,             $contents, $matches)){
   echo "Population: \n";
   echo implode("\n", $matches[0]);

}
else{
   echo "No matches found";
}
header('Content-Type: text/html');
}
ob_end_flush();
?>
<html>
<head><title>some title</title></head>
<body>

<form method="post" action="">
    <input type="text" name="search" />
    <input type="submit" name="submit" />
</form>

</body>
</html>
于 2013-08-12T02:20:13.637 に答える