【问题标题】:PHP match string, is fnmatch right for the jobPHP 匹配字符串,fnmatch 适合这项工作
【发布时间】:2012-06-09 18:16:57
【问题描述】:

我试图弄清楚如何将数组中的值与特定字符串进行比较。

基本上我的值看起来像 chrisx001、chrisx002、chrisx003、chrisx004、bob001

我在看fnmatch(),但我不确定这是不是正确的选择,因为我想做的是保留 chrisx--- 但忽略 bob--- 所以我需要在最后一位通配符,是有一种方法可以做到这一点,我可以像

if($value == "chrisx%"){/*do something*/}

如果可能的话,是否可以在其他情况下将 % 值作为 int 或类似的值进行双重检查?

【问题讨论】:

  • 不清楚你想在哪里做这个比较,但如果你想快速获得chrisx的数组,那么你也可以看看preg_grep()。跨度>

标签: php string comparison


【解决方案1】:

正则表达式可以告诉你字符串是否以 chrisx 开头:

if (preg_match('/^chrisx/', $subject)) {
  // Starts with chrisx
}

你也可以在 chrisx 之后捕获位:

preg_match('/^chrisx(.*)/', $subject, $matches);

echo $matches[1];

【讨论】:

  • 哈,甚至没有考虑 preg_match,猜有时答案在盒子里面,而不是外面..谢谢
  • @chris 很容易养成尝试想出最聪明,有时甚至是晦涩难懂的方法来实现目标的习惯。他们通常是最令人满意的:)
  • preg_match 是 PHP 推荐的正则表达式系统。另一个(ereg)已被弃用。 stackoverflow.com/questions/1361591/php-ereg-vs-preg
【解决方案2】:

您可以过滤您的数组以返回仅包含以“chris”开头的条目的第二个数组,然后处理该过滤后的数组:

$testData = array ( 'chrisx001', 'chrisx002', 'chrisx003', 'chrisx004', 'bob001');
$testNeedle = 'chris';

$filtered = array_filter( $testData, 
                          function($arrayEntry) use ($testNeedle) { 
                              return (strpos($arrayEntry,$testNeedle) === 0); 
                          }
);

var_dump($filtered);

【讨论】:

  • 或者,preg_grep('/^chrisx/', $testData)
猜你喜欢
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 2011-08-09
  • 2013-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多