2017-02-07 15 views
0

我必須迭代300個文件,並將字符串從一列中更改爲Excel中的4列。我知道有一種方法可以在reg-ex中執行此操作,但我無法確定它出...我知道preg_match可以命名返回的匹配..但我試圖使用regex101.com來弄清楚如何獲得我正在尋找的返回結果..獲取多個子字符串的數組preg_match_all

我有這個字符串..

Rev 1: blah blah blah blah blah blah 1/1/2017 BLAH 

,我必須把它放到一個數組,看起來像這樣...

$results = array(
    "rev" => "Rev 1", 
    "text" => "blah blah blah blah blah blah", 
    "date" => "1/1/2017" 
    "name" => "BLAH" 
) 

我面臨的問題是,我不知道如何在一次preg_match調用中獲得多個匹配以返回所需的方式..我曾試圖讓谷歌以某種方式來做到這一點,並已空出來。

我有一些正則表達式匹配每個字符串separtly ..但不是所有的一次。

\d+\/\d+\/\d+ \(?[A-z]+\)?匹配datename帶或不帶周圍

^([Rr][Ee][Vv] \d+:)()匹配rev

我不知道的方式來獲得rev之間的textdate所以我做沒有reg-ex的那個...

+1

沒有什麼會是傻瓜式的證明。如果看起來像日期的東西出現在文本中怎麼辦? – AbraCadaver

+0

我個人時,雖然所有300多張,並檢查了所有,當我從一個Excel評論的文本複製到新標籤。所以我知道沒有那樣的事情。如果有,比起這樣做,即時通訊去通過他們一次一個,並仔細檢查,因爲當我運行這個腳本它會將它們保存到一個新的目錄,而不是覆蓋原來的文件。但是,你是對的,對於其他人來說這可能行不通。 –

回答

1

你真的很接近(在這裏告誡:我假設你所有的字符串將是相同的格式)

^([Rr][Ee][Vv] \d+:)(.*)\d+\/\d+\/\d+(.*)? 

(.*)可讓您捕獲組之間的內容。你應該把你想要捕獲的東西放在括號內。

你可以看到在行動在這裏https://regex101.com/r/8GKgWl/1

+0

ahhh,看'(。*)'是缺失的鏈接,我知道有一種方法,哈哈,謝謝! –

+0

以此https://regex101.com/r/8GKgWl/2作爲最終表達式:D –

+0

由於某種原因返回false。 https://regex101.com/r/8GKgWl/3 works雖然 –

相關問題