Strpos同时包含整数和单词

时间:2013-09-28 09:29:45

标签: php strpos

我被困住了。忽略顶行,暂不使用日期,但会稍微使用。问题主要与这一行有关:

  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 个答案:

答案 0 :(得分:0)

返回值

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

Manual 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将无法使用)。

答案 1 :(得分: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;
  }
}
}

?>

答案 2 :(得分:0)

根据preg_match文档:

  

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

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

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

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

答案 3 :(得分:-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域名是否只包含来自a-z和A-Z的字符。如果允许破折号,您可能希望在正则表达式中包含“ - ”。