2017-11-04 111 views
-1

我正在學習正則表達式和導師給了我這個先進的鍛鍊。這些字符串的最佳正則表達式?

使用preg_replace並創建一個正則表達式,該正則表達式可以在下列字符串的開始處刪除所有數字。

01. A little love (2002) 
02 - No.1 Star 
03 Love Story 

這是相當困難的像我這樣的初學者,所以我在這裏要問,我會很感激,如果你們能幫助我與此有關。

+0

你可以在第一個空格之前刪除所有東西 – nogad

+0

我知道使用'substr'等其他函數比較容易,但是我不能這樣做,因爲這是他的練習。 –

+0

到目前爲止您嘗試過什麼? – Ibrahim

回答

0

我強烈建議你去Online regex tester and debugger。你將學到很多有關正則表達式的知識,並會開始認爲事情通常並不像表面上那麼難。

在你的情況,讓我們假設每條線位於$線。如果您的數據在文件中,請轉至this question。讓我們還假設你想要的輸出是

A little love (2002) 
No .1 Star<br> 
Love Story 

你coud做,以各種方式。其中一人

$pattern = '/(^\d+\W+)(\w+.*)/'; 
$result = preg_replace($pattern, '$2', $line); 
0

對於最快的結果(見在regex101的步數),使用:

/^[^A-Z]+/mPattern Demo Link

  • 出發錨^
  • 一個否定的字符類,列出所有大寫字母
  • 貪婪「一個或多個」量詞
  • ,並在圖案的端部的多線標誌/改性劑

輸出:

A little love (2002) 
No.1 Star 
Love Story 

PHP代碼:(Demo

$input='01. A little love (2002) 
02 - No.1 Star 
03 Love Story'; 

echo preg_replace('/^[^A-Z]+/m','',$input); 
0

使用PHP的multiline modifier這一點,這樣你能夠在每行各自獨立的線的開始檢測前置號碼並刪除不需要的字符。

參見:https://regex101.com/r/G3AzSx/1

<?php 
$string = ' 
01. A little love (2002) 
02 - No.1 Star 
03 Love Story 
'; 
$string = preg_replace('/^[0-9.\s\-]+/m', '', $string); 

這就給了你:

A little love (2002) 
No.1 Star 
Love Story 

打破下來你:
/^[0-9.\s\-]+/m

  • 要在多行模式的行軋花^
  • 由一個或多個數字0-9,點.,空白\s或破折號\-其次。