2017-03-28 49 views
-1

我可以使用正則表達式和PHP例如文件中獲得數:PHP格式從textarea的正則表達式的多個條目

<?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"; 
    } 
?> 

,但我想要做的是例如,在文本區域中輸入多個文件名並轉換這樣的:

house.1x02.paternity.ws_dvdrip_xvid-fov.mp4 
house.1x03.occams_razor.ws_dvdrip_xvid-fov.mp4 
house.s04e15.dvdrip.xvid-orpheus.mp4 

這個

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只是緊閉g 1 2 3等,而不是01 02 03,這樣可以更容易地複製粘貼查詢並插入到數據庫中。由於文件名太多,所以一個接一個地花費很多時間。

有沒有更好的方法來獲得這個?

+0

顯然,唯一未知的是讓這些1x0'2' 1x0'3' s04e'15'。爲什麼不說這就是你想要匹配的。如果沒有它在字符串中的位置和代表它的變量格式的嚴格規則,就不能匹配它。爲什麼人們試圖回答這個問題是未知的。 – sln

回答

-1

將是很容易做這樣的事情:

// 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'); 

DEMO: SQL:http://rextester.com/HHG48901 PHP:http://rextester.com/ZSMJ67483

0

我得到了我想要的結果,也許不是最精彩的這樣做的方式,但它的工作。

<?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是有這樣做的更好的辦法?

+0

只要使用'INTVAL()'得到作爲整數數..不需要任何更換。我的答案是...... –

+0

是的,我看到謝謝你。 – Slightz

+0

不客氣,希望對你有用 –

0
"/.*?(\\d+).*?(\\d+)/is" -- working too hard; instead: 

"/(\d+).(\d+)/" 
  • 由於正則表達式是不固定,也沒有必要爲主導.*?
  • .*? is the same as *`
  • 我不認爲你需要額外的反斜線。
  • 數字之間的分隔符很奇怪。我不可能真的是零長度,否則\d+會拿起第二串數字。
  • /i是沒有必要的,因爲沒有字母。
  • 避免前導零似乎是不必要的; MySQL會將字符串'010'視爲十個,而不是八個。 (我懷疑你擔心,PHP將處理010爲8)。
  • /s可能是不必要的 - 會有多個「行」?