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() 返回 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 回答
0

根据preg_match文档:

preg_match()如果模式匹配给定的主题,则返回1,如果不匹配,则返回 0``,如果发生错误,则返回 FALSE。

因此,根据您当前的情况,该if语句将评估为TRUEifpreg_match返回任何不是的值FALSE(包括1and 0)。如果找到匹配项,则preg_match返回,因此您的所有域都将通过条件并回显。1

要修复错误,请将您的if语句更改为:

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

因此,您正在搜索其中没有数字的 .com 域(“高级域”)。

<?php

$lines = array(
    'example.com',
    'exa13mple.com',
    'domain.org',
    'google.com',
    '37signals.com'
);

foreach ($lines as $line)
{
    $matches = array();
    $isComDomain = preg_match('/\w+\\.com/', $line, $matches);
    $hasNoNumbers = !empty($matches) ? preg_match('/^[a-zA-Z]+\\.com$/', $matches[0]) : false;

    if ($isComDomain && $hasNoNumbers) {
        print $matches[0] . "\n";
    }
}

isComDomain 是一个布尔值,告诉它是否从该行中找到了 [word characters].com。如果找到,它将找到的域名存储在 $matches[0] 中。

然后 hasNoNumbers 是一个布尔值,用于判断 .com 域名是否仅包含来自 az 和 AZ 的字符。如果您允许破折号,您可能希望在正则表达式中包含“-”。

于 2013-09-28T09:47:51.400 回答