我的工作代码从字符串中提取标题,但现在它仍然不是非常灵活。
当前代码:
$post_title = "THIS IS A TEST - 10-01-2010 - HELLO WORLD (OKAY)!!";
$post_title = substr($post_title, 0, strpos($post_title, '-') - 1);
我想得到字符串的标题,它位于字符串的开头,直到第一个短划线。我不想在破折号之前得到空格,可能根本就没有破折号。
当前代码的输出工作并输出THIS IS A TEST
。
但目前的代码并不适用于以下情况,所以我需要一个更灵活的代码:
所以标题可以在没有-
的情况下存在,有人可能会忘记在-
之间放置一个空格,同样地,某人可能会放置太多空格。
上述所有情况的输出应始终为THIS IS A TEST
,最后不得有空格。
使用我的代码,唯一有效的是第一个。
$title= explode('-', $post_title);
$post_title=trim($title[0]);
$trimmedTitle=$post_title;
$str = "THIS IS A TEST -0-01-2010 - HELLO WORLD (OKAY)!!";
preg_match("/^([\w\s]+)\s*-?/m", $str, $m);
print_r($m);
var_dump($variableName);
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS));
$files = array();
$notAllowedExtension = array('jpg', 'vtr', 'html', 'htm' );
foreach($iterator as $file){
if(!in_array($file->getExtension(), $notAllowedExtension) && !$file->isDir())
//$files[filemtime($file->getPathname())] = $file->getPathname();
$files[] = $file->getPathname();
}
sort($files);
echo "<pre>" . print_r($files, true) . "</pre>";
答案 0 :(得分:1)
将爆炸()与&#34; - &#34;作为一个分隔符,根据&#34; - &#34;的存在将其分成块。然后取第一部分并使用trim()修剪尾随空格,使标题没有尾随空格。这给了&#34;这是一个测试&#34;在所有提供的测试用例中。如果没有破折号,则返回整个字符串。
<?php
$str = 'THIS IS A TEST - 10-01-2010 - HELLO WORLD (OKAY)!!';
$title= explode('-', $str);
$trimmedTitle=trim($title[0]);
print_r($trimmedTitle);
//$trimmedTitle ='THIS IS A TEST
?>
我对此进行了测试:
THIS IS A TEST - 10-01-2010 - HELLO WORLD (OKAY)!!
THIS IS A TEST-10-01-2010 - HELLO WORLD (OKAY)!!
THIS IS A TEST - - - - 10-01-2010 - HELLO WORLD (OKAY)!!
THIS IS A TEST
并且每个都返回这是一个没有尾随空格的测试
答案 1 :(得分:0)
如果要使用explode()
,则最佳做法是将输出数组中的元素数限制为2个,因为您只对第一个元素感兴趣。想一想,如果您不打算使用它们,为什么还要费心在文本中的后续连字符?
$str = "THIS IS A TEST -0-01-2010 - HELLO WORLD (OKAY)!!";
$parts = explode($str, '-', 2);
$post_title = rtrim($parts[0]);
...但是关于这项技术,我不喜欢两件事:
出于这个原因,我建议使用preg_replace()
直接修剪不需要的字符,而不生成任何数组,也不要进行任何额外的清理。
代码:(PHP Demo)(Pattern Demo)
$str = "THIS IS A TEST -0-01-2010 - HELLO WORLD (OKAY)!!";
var_export(preg_replace('~ *-.*~', '', $str));
输出:
'THIS IS A TEST'
模式说,匹配零个或多个空格,后跟第一个出现的连字符,然后匹配零个或多个字符,直到行/字符串的结尾。