我想过滤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)
总而言之,列表ç & é @ ! ? “ ' ³ = +
等`中包含任何字符的所有字符串都不匹配
答案 0 :(得分:0)
你的正则表达式与整个字符串不匹配,并且你使用的是模糊的正则表达式分隔符,建议使用更常见的符号作为正则表达式分隔符。
'/^[a-zA-Z0-9_:.()\/]*$/'
^^ ^^
^
将匹配字符串的开头,$
将匹配其结尾,需要整个字符串匹配。
此外,[a-zA-Z0-9_]
可以写为\w
,用它来缩短模式(仅当您不想匹配Unicode字符串时才建议这样做):
'/^[\w:.()\/]*$/'