匹配这些字符串的正则表达式

时间:2017-02-08 10:55:03

标签: php regex

我想过滤csv文件中的字符串,并且我正在寻找与这些字符串匹配的正确正则表达式:

  

PLP_LES_HALLES.VOLUME_POMPE

     

纽约:流量(m3 / h)的

实际上,字符串不应包含任何字符:ç & é @ ! ? “ ' ³ = +等。  我试过这个:  ([a-zA-Z0-9_:.(\/)]*)但是当我测试它时,我发现它匹配所有东西。请帮我找到正确的。

以下是我要测试的代码:

   while (($line = fgetcsv($handle, 1024, ";")) !== FALSE) {
        $total = count( $line );
        $keys = array('mesure', 'timestamp', 'value');
        $args=array(
          'mesure' => array('filter' => FILTER_VALIDATE_REGEXP, 
                            'options' => array('regexp' => '([a-zA-Z0-9_:.(\/)]*)')),
          'timestamp' => array( 'filter' => FILTER_VALIDATE_INT,
                                'options' => array('min_range' => 20000000000000, 'length' => 14)),
          'value' => FILTER_VALIDATE_FLOAT);
        $testing = filter_var_array(array_combine($keys, $line), $args);
        var_dump($testing);
    }
  

修改

这些字符串不匹配:

PLP_LES_HALLéS.VOLUME_POMPE
PLP_LES_HàLLES.VOLUME_POMPE
Newyork:Flow(m³/h)

总而言之,列表ç & é @ ! ? “ ' ³ = +等`中包含任何字符的所有字符串都不匹配

1 个答案:

答案 0 :(得分:0)

你的正则表达式与整个字符串不匹配,并且你使用的是模糊的正则表达式分隔符,建议使用更常见的符号作为正则表达式分隔符。

'/^[a-zA-Z0-9_:.()\/]*$/'
 ^^                   ^^

^将匹配字符串的开头,$将匹配其结尾,需要整个字符串匹配。

此外,[a-zA-Z0-9_]可以写为\w,用它来缩短模式(仅当您不想匹配Unicode字符串时才建议这样做):

'/^[\w:.()\/]*$/'