作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个日期(例如 yyyy-mm-dd hh:mm:ss),如果我们有一个字符串完全匹配或部分匹配该模式,我希望能够从头开始返回 true结束。例如。 44
会匹配模式,因为 44
会匹配 yy 但 -12
不会匹配,因为 -
不是一个有效的“y”字符。
我想到了一些不雅的解决方案。我可以对这样的东西进行 preg_match
:
#^\d(\d(\d(\d(-)?)?)?)?$#
这只是根据年份执行部分匹配。它需要扩展以说明月、日、小时、分钟等,但这应该表明想法 # 1。
我也可以做类似...
$patterns = [
'',
'\d',
'\d\d',
'\d\d\d',
'\d\d\d\d',
'\d\d\d\d-',
...
];
isset($patterns[strlen($str)] && preg_match('#^' . $patterns[strlen($str)] . '$#', $str)
但这也有点令人费解。
我也可以这样做:
switch (strlen($str)) {
case 1: return preg_match('#^\d$#', $str);
case 2: return preg_match('#^\d\d$#', $str);
case 3: return preg_match('#^\d\d\d$#', $str);
case 4: return preg_match('#^\d\d\d\d$#', $str);
case 5: return preg_match('#^\d\d\d\d-$#', $str);
...
}
但这看起来也很臃肿。
换句话说,我正在寻找 2005-
将返回 true 的函数,2
和 2005-1
也是如此.但是 -2005
将返回 false,205-
或 neubert
也是如此。
我希望能够将有效值传递到 SQL 查询中。例如。 WHERE date_column LIKE '$str%'
。如果 date_column
是 DATETIME,那么搜索 -12-
就是浪费时间,因为 date_column
不可能将其作为值。
有什么想法吗?
最佳答案
像这样的东西应该可以工作:
function doesMatch($str) {
// The date pattern split so that each array entry matches exactly one character
$pattern_chunks = array(
'\d', '\d', '\d', '\d', '-',
'\d', '\d', '-',
'\d', '\d',
'\s',
'\d', '\d', ':',
'\d', '\d', ':',
'\d', '\d'
);
$chunk_count = count($pattern_chunks);
$str_len = strlen($str);
// If the string is empty, it's clearly not a date
if ( $str_len < 1 ) { return false; }
// If the string is longer than our pattern chunks, there's no way it matches
if ( $str_len > $chunk_count ) { return false; }
// Make a pattern using the first N chunks of our pattern parts
$pattern = '^' . implode('', array_slice($pattern_chunks, 0, $str_len)) . '$';
// Return if the string matches
return (preg_match($pattern, $str) > 0);
}
例如,您的输入字符串有 6 个字符长,它只使用日期模式的前 6 个 block (^\d\d\d\d-\d$
)。
关于php - 从头开始匹配字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37279585/
我需要用这样的数据构建一个表: ┌────────┬───────────┬────────┐ │ ID │ Name │ Age │ ├────
我是一名优秀的程序员,十分优秀!