[英]RegEx string “preg_replace”
我需要对CSV文件的约45,000行执行“查找并替换”,然后将其放入数据库中。
我认为我应该可以使用PHP和preg_replace做到这一点,但似乎无法弄清楚该表达式...
这些行由一个字段组成,并且全部采用以下格式:
“ ./1/024/9780310320241/SPSTANDARD.9780310320241.jpg”或“ ./t/fla/8204909_flat/SPSTANDARD.8204909_flat.jpg”
第一部分将始终为一个句点,第二部分将始终为一个字母数字字符,第三部分将始终为三个字母数字字符,第四部分应始终在1到13个字母数字字符之间。
我提出了以下似乎正确的建议,但我将公开宣称对正则表达式一点也不了解,这对我来说有点新! 我可能在这里犯了很多愚蠢的错误...
$pattern = "/^(\.\/[0-9a-zA-Z]{1}\/[0-9a-zA-Z]{3}\/[0-9a-zA-Z]{1,13}\/)$/";
$new = preg_replace($pattern, " ", $i);
无论如何,任何帮助都值得赞赏!
谢谢,菲尔
我遇到的唯一错误是应该删除的字符串end $
的锚点。 而且您的表达式也缺少_
字符:
/^(\.\/[0-9a-zA-Z]{1}\/[0-9a-zA-Z]{3}\/[0-9a-zA-Z_]{1,13}\/)/
更一般的模式是只排除/
:
/^(\.\/[^\/]{1}\/[^\/]{3}\/[^\/]{1,13}\/)/
在匹配任何模式之前,您应该使用PHP的内置解析器从csv中提取值。
$
表示字符串的结尾。 因此,如果它们单独出现,则您的模式将匹配./1/024/9780310320241/
和./t/fla/8204909_flat/
。 删除$
,它将与字符串的前四个部分匹配,并用空格替换。
$pattern = "/(\.\/[0-9a-z]{1}\/[0-9a-z]{3}\/[0-9a-z\_]+\.(jpg|bmp|jpeg|png))\n/is";
我刚刚看到,您的示例字符串不以/结尾,所以可能您应该从模式末尾将其删除。 在文件名中也应使用下划线,并且应在字符类中。
我不确定我是否理解您的要求。 您是说文件中的每一行都是这样,并且您想处理所有这些行吗? 如果是这样,则此正则表达式可以解决问题:
'#^.*/#'
这简单地匹配了包括最后一个斜杠在内的所有内容,如果不是每个人都在谈论的冒号“ $”,则这是您的正则表达式将执行的操作。 如果您想单独使用其他格式的其他行,则此正则表达式可能会满足您的需求:
'#^\./\w/\w{3}/\w{1,13}/#"
请注意,我是如何将正则表达式定界符从“ /”更改为“#”的,因此我不必在其中转义斜杠。 您几乎可以将任何标点符号都用作分隔符(但当然它们必须相同)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.