我被困住了。忽略顶行,暂不使用日期,但会稍微使用。问题主要与这一行有关:
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;
}
}
}
?>
答案 0 :(得分:0)
返回值
如果模式与给定主题匹配,则preg_match()返回1,否则返回0;如果发生错误,则返回FALSE。
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
(包括1
和0
)。如果找到匹配项,则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的字符。如果允许破折号,您可能希望在正则表达式中包含“ - ”。