0

私は立ち往生しています。一番上の行は無視してください。日付はまだ使用されていませんが、少し使用する予定です。主にこの行に問題があります:

  if(strpos($line, $extension) !== false and (preg_match('#\d#',$line !== false))){

私がやろうとしているのは、ドメイン名 ($line) が .com で数字がない場合、それをエコーすることです。すべての preg_replace と strlen が機能しているように見えますが、必要な方法でのみ実行することはできません。混乱を招く可能性があるため、preg_match を <=40 ルールの外に置く必要がありますか?

<?php

date_default_timezone_set('UTC');

$extension = '.com';
$lines = file('PoolDeletingDomainsList.txt');

echo "<b>4 Letter premiums for ". date("n/j/Y") .":</b><br />";

foreach($lines as $line)

if(strlen($line)<=40) {

{
  // Check if the line contains the string we're looking for, and print if it does
  if(strpos($line, $extension) !== false and (preg_match('#\d#',$line !== false))){
    $line = preg_replace('/12:00:00 AM,AUC\b/','<br />', $line);
    $line = preg_replace('/,9\/28\/2013/', '', $line);
    echo $line;
  }
}
}

?>
4

4 に答える 4

0

これが私にとってうまくいくように見えたものです。

date_default_timezone_set('UTC');

$extension = '.com';
$lines = file('PoolDeletingDomainsList.txt');

echo "<b>4 Letter premiums for ". date("n/j/Y") .":</b><br />";

foreach($lines as $line)

if(strlen($line)<=36) {

{
  // Check if the line contains the string we're looking for, and print if it does
  $line = preg_replace('/12:00:00 AM,AUC\b/','<br />', $line);
  $line = preg_replace('/,9\/28\/2013/', '', $line);

  if ((false !== strpos($line, $extension)) && (0 === preg_match('#\d#',$line)) && (0 === preg_match('/-/', $line))){
    echo $line;
  }
}
}

?>
于 2013-09-28T10:09:59.050 に答える
0

ドキュメントによるとpreg_match

preg_match()パターンが指定されたサブジェクトに一致する場合は 0 を返し1、そうでない場合は 0 を返し、エラーが発生した場合は FALSE を返します。

したがって、現在の条件によると、ifステートメントは、そうでない値( andを含む) を返すTRUE場合に評価されます。一致が見つかった場合は返されるため、すべてのドメインが条件を通過してエコーされます。preg_matchFALSE10preg_match1

エラーを修正するには、ifステートメントを次のように変更します。

if(strpos($line, $extension) !== false && !preg_match('#\d#',$line)) {
于 2013-09-28T10:10:33.653 に答える
0

戻り値

preg_match() は、パターンが指定されたサブジェクトに一致する場合は 1 を返し、そうでない場合は 0 を返し、エラーが発生した場合は FALSE を返します。

手動 preg_match

  if(strpos($line, $extension) !== false and (preg_match('#\d#',$line) !== false))){
    $line = preg_replace('/12:00:00 AM,AUC\b/','<br />', $line);
    $line = preg_replace('/,9\/28\/2013/', '', $line);
    echo $line;
  }

と置換する

if ((false !== strpos($line, $extension)) && (1 === preg_match('#\d#',$line))){
    $line = preg_replace('/12:00:00 AM,AUC\b/','<br />', $line);
    $line = preg_replace('/,9\/28\/2013/', '', $line);
    echo $line;
}

これは、$line に .com が含まれていて数字が含まれているかどうかを確認します (そうでない場合、これらの preg_replace は何も機能しません)。

于 2013-09-28T09:55:33.907 に答える