PHP格式化textarea正则表达式中的多个条目
我可以使用正则表达式和PHP从文件中获取数字,例如:PHP格式化textarea正则表达式中的多个条目,php,mysql,regex,Php,Mysql,Regex,我可以使用正则表达式和PHP从文件中获取数字,例如: <?PHP $txt='house.1x01.pilot.ws_dvdrip_xvid-fov.mp4'; if ($c=preg_match_all ("/.*?(\\d+).*?(\\d+)/is", $txt, $matches)) { $int1=$matches[1][0]; $int2=$matches[2][0]; print "($int1) ($int2) \n";
<?PHP
$txt='house.1x01.pilot.ws_dvdrip_xvid-fov.mp4';
if ($c=preg_match_all ("/.*?(\\d+).*?(\\d+)/is", $txt, $matches))
{
$int1=$matches[1][0];
$int2=$matches[2][0];
print "($int1) ($int2) \n";
}
?>
进入这个
INSERT INTO `tvshow` (`id`, `show_id`, `season`, `episode`, `file`) VALUES (NULL, '18', '1', '2', 'house.1x02.paternity.ws_dvdrip_xvid-fov.mp4');
INSERT INTO `tvshow` (`id`, `show_id`, `season`, `episode`, `file`) VALUES (NULL, '18', '1', '3', 'house.1x03.occams_razor.ws_dvdrip_xvid-fov.mp4');
INSERT INTO `tvshow` (`id`, `show_id`, `season`, `episode`, `file`) VALUES (NULL, '18', '4', '15', 'house.s04e15.dvdrip.xvid-orpheus.mp4');
将其格式化为SQL,删除0只保留1 2 3等,而不是01 02 03,这样可以更轻松地复制粘贴查询并插入数据库。因为有这么多的文件名,一个接一个地做是很费时的
有没有更好的方法来获取此信息?这样做很容易:
// YOUR ARRAY WITH FILE NAMES
$files = array('house.1x02.paternity.ws_dvdrip_xvid-fov.mp4',
'house.1x03.occams_razor.ws_dvdrip_xvid-fov.mp4',
'house.s04e15.dvdrip.xvid-orpheus.mp4'
);
$show = 18; // THE SHOW ID TO INSERT
$sql = array(); // EMPTY ARRAY TO HOLD THE QUERIES
// CREATE A CONNECTION TO YOUR DATABASE:
$con = mysqli_connect("127.0.0.1", "user", "password", "databasename");
// LOOP THROUGH FILES...
foreach($files as $txt){
if ($c=preg_match_all ("/.*?(\\d+).*?(\\d+)/is", $txt, $matches)) {
$season = intval($matches[1][0]); // REMOVES ANY LEADING ZEROS..
$episode = intval($matches[2][0]); // REMOVES ANY LEADING ZEROS.
// RUN YOUR QUERY HERE:
$sql = "INSERT INTO `tvshow` (`id`, `show_id`, `season`, `episode`, `file`) VALUES (NULL, '".$show."', '". $season ."', '". $episode ."', '". $txt ."')";
$con->query($sql);
// OR UNCOMMENT TO SAVE IN ARRAY FOR LATER USE IF YOU WANT:
//$sql[] = "INSERT INTO `tvshow` (`id`, `show_id`, `season`, `episode`, `file`) VALUES (NULL, '".$show."', '". $season ."', '". $episode ."', '". $txt ."')";
}
}
将按照您的要求生成SQL查询:
INSERT INTO `tvshow` (`id`, `show_id`, `season`, `episode`, `file`) VALUES (NULL, '18', '1', '2', 'house.1x02.paternity.ws_dvdrip_xvid-fov.mp4');
INSERT INTO `tvshow` (`id`, `show_id`, `season`, `episode`, `file`) VALUES (NULL, '18', '1', '3', 'house.1x03.occams_razor.ws_dvdrip_xvid-fov.mp4');
INSERT INTO `tvshow` (`id`, `show_id`, `season`, `episode`, `file`) VALUES (NULL, '18', '4', '15', 'house.s04e15.dvdrip.xvid-orpheus.mp4');
演示:
SQL:
PHP:我得到了我想要的结果,也许不是最漂亮的方式,但它起了作用
<?php
$eps = array("house.1x02.paternity.ws_dvdrip_xvid-fov.mp4","house.1x03.occams_razor.ws_dvdrip_xvid-fov.mp4","house.1x04.maternity.ws_dvdrip_xvid-fov.mp4","house.1x05.damned_if_you_do.ws_dvdrip_xvid-fov.mp4","house.1x06.the_socratic_method.ws_dvdrip_xvid-fov.mp4","house.1x07.fidelity.ws_dvdrip_xvid-fov.mp4","house.1x08.poison.ws_dvdrip_xvid-fov.mp4","house.1x09.dnr.ws_dvdrip_xvid-fov.mp4","house.1x10.histories.ws_dvdrip_xvid-fov.mp4","house.1x11.detox.ws_dvdrip_xvid-fov.mp4","house.1x12.sports_medicine.ws_dvdrip_xvid-fov.mp4","house.1x13.cursed.ws_dvdrip_xvid-fov.mp4","house.1x14.control.ws_dvdrip_xvid-fov.mp4","house.1x15.mob_rules.ws_dvdrip_xvid-fov.mp4","house.1x16.heavy.ws_dvdrip_xvid-fov.mp4","house.1x17.role_model.ws_dvdrip_xvid-fov.mp4","house.1x18.babies_and_bathwater.ws_dvdrip_xvid-fov.mp4","house.1x19.kids.ws_dvdrip_xvid-fov.mp4","house.1x20.love_hurts.ws_dvdrip_xvid-fov.mp4","house.1x21.three_stories.ws_dvdrip_xvid-fov.mp4","house.1x22.honeymoon.ws_dvdrip_xvid-fov.mp4");
foreach ($eps as $value) {
if ($c=preg_match_all ("/.*?(\\d+).*?(\\d+)/is", $value, $matches)) {
$int1=$matches[1][0];
$int2=$matches[2][0];
$array2=array('10','20','30');
if (!in_array($int1,$array2)) {
$int1=str_replace("0","",$int1);
}
if (!in_array($int2,$array2)) {
$int2=str_replace("0","",$int2);
}
echo "INSERT INTO `tvshow` (`id`, `show_id`, `season`, `episode`, `file`) VALUES (NULL, '18', '$int1', '$int2', '$value'); <br>";
}
}
?>
我添加了该数组,因此它不会从10或20中删除0。有更好的方法吗
"/.*?(\\d+).*?(\\d+)/is" -- working too hard; instead:
"/(\d+).(\d+)/"
由于regexp未锚定,因此不需要前导。*?
.*? 与相同*`
我认为你不需要额外的反斜杠。
数字之间的分隔符很奇怪。我不能真的是零长度,否则\d+将拾取第二个数字串。
/我没有必要,因为没有信。
避免前导零似乎是不必要的;MySQL将字符串“010”视为10,而不是8。我怀疑您担心PHP会将010处理为8。
/s可能是不必要的-会有多行吗?
只需使用intval将数字作为整数。。不需要更换。谢谢我的回答。不客气,希望你能成功you@MichaelK我试图直接在你推荐的$con->query$sq文件上执行查询;但我得到了这个错误致命的错误:调用nulloddd上的成员函数查询,它实际上运行查询,但我得到了这些错误。在tvshow id、show_id、季节、插曲、文件值中插入空值,“18”、“1”、“2”、“house.1x02.paternity.ws_dvdrip_xvid-fov.mp4”;错误:数组插入到tvshow id、show_id、季节、插曲、文件值为空,'18','1','3','house.1x03.occams_razor.ws_dvdrip_xvid-fov.mp4';错误:数组插入到tvshow id、show_id、季节、插曲、文件值为空,'18','4','15','house.s04e15.dvdrip.xvid orpheus.mp4';错误:ArrayYou必须首先创建到要插入的数据库的连接。你做到了吗?如果您能用数据库表模式和每列的数据类型更新您的问题,我会有所帮助,您是否将数字存储为整数等。显然,唯一未知的事情是得到这些1x02 1x03 s04e15。为什么不说这就是你想要匹配的呢。如果没有严格的字符串位置规则和表示它的变量格式,就无法匹配它。人们为什么试图回答这个问题还不清楚。
"/.*?(\\d+).*?(\\d+)/is" -- working too hard; instead:
"/(\d+).(\d+)/"