Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP格式化textarea正则表达式中的多个条目_Php_Mysql_Regex - Fatal编程技术网

PHP格式化textarea正则表达式中的多个条目

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从文件中获取数字,例如:

<?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+)/"