2014-10-08 36 views
0

我正在嘗試爲php preg_split寫一個正則表達式來捕獲特定的「標題」,就像處理textarea中的文字一樣。用於在textarea中捕獲「標題」觸發器字的RegExp

我想使用生成的數組來改進用戶的格式,並在評論帖子中創建流線型的外觀。

$returnValue = preg_split('/[^|\n]*[\t| ]*\b(Pro|Contra|Conclusion)\b\:[\t| ]*/i', 
          $data['review_text'], 
          -1, 
          PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE); 

這是我的示例文本輸入

Intro line one, first part of the array 
Pro:Pro:double Pro 1, no space between 
Pro: Pro:double Pro 2, space between 
Pro: test Pro:double Pro 3, characters between 
Pro: 
Pro:double Pro 4, linebreak betweem, should create an empty pro entry 
Contra: 
Conclusion: the last Contra was empty 
Conclusion: this Contra: in this row should not match! 
Conclusion: Test with spaces between Conclusion and : 
Conclusion: this Conclusion was prefixed by a space 
    Conclusion: this Conclusion was prefixed by a Tab 
     Conclusion: this Conclusion was prefixed by two Tabs a space between 
Conclusion : this Conclusion has a space between Conclusion and : 



a final line with multiple line breaks in between, should be part of the last conclusion fragment 

結果應當由[0]作爲介紹線,4個Pro的結果(與他們的定界符),1孔特拉(空)和7結論結果(與他們的分隔符)。唯一的魂鬥羅應該是空的,最後一行應該是最後的結論部分

我想匹配這樣的事情

  1. 啓動線之後,開始文件
  2. 零或正出現任何空白字符
  3. 任何版本的專業版,魂鬥羅或結論(忽略大寫/小寫)
  4. 零或正任何空白字符的出現

在此爲了

+0

你的問題是什麼? – anubhava 2014-10-08 16:48:53

+0

我不明白你想要做什麼。這種文本是以任何形式的可變格式?另外,管道符號在一個類中並且意味着一個文字。 – sln 2014-10-08 16:50:18

+0

我正在尋找更好的Regen版本來捕獲所有「Pro:」,「Contra:」和「結論:」,它們在單詞之前或之後的任意空格組合中排在第一位。如果其中的一個是文本中的第一個單詞,它也應該匹配。該文本僅僅是我用來測試匹配算法的示例。我不是正則表達式專家,我在網上找到的文檔要麼不是很完整,即使有衝突的信息。 – KADlancer 2014-10-09 06:13:03

回答

0

隨着@幫助M42,我能找出正確的方式...

'/\n[\t ]*\b(Pro|Contra|Conclusion)[\t ]*:[\t ]*/i' 

在只有「文件的開始,而不是新行「缺失,這幾乎完全是我想要的(儘管如此,仍然測試)。現在我在字符串之前添加一個「\ r \ n」,當我修剪()字符串片段時,該字符串會被剝離。

完整的PHP調用如下

$returnValue = preg_split('/\n[\t ]*\b(Pro|Contra|Conclusion)[\t ]*:[\t ]*/i', $data['review_text'], -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE); 

以防萬一你想知道,爲什麼我在回答M42使用Fazit而不是結論,我在寫代碼的德國Web應用程序,所以我必須將每個副本&粘貼到StackOverflow。 (ಠ_ಠ)

1

首先,[^|\n]*意味着0個或多個字符不屬於管|或換行符。
[\t| ]*表示0個或多個字符不是製表符或管道|或空格。

我想你想:

/\s*\b(Pro|Contra|Conclusion):[\t ]*/i 
+0

我開始使用您的版本,並提出了幾乎與我的要求'/ \ n + \ s * \ b(Pro | Contra | Fazit)相匹配的東西:[\ t] */i'但是,如果單詞是文件中第一個沒有先行換行符的文件...所以我需要包括^開始文件,但到目前爲止我失敗了 – KADlancer 2014-10-09 09:13:11

+0

我想我知道了...我必須在括號內\ n之外...'/ [^ \\ n] + \ s * \ b(Pro | Contra |結論):[\ t] */i'似乎完全符合我的意願。謝謝你送我正確的方向。 – KADlancer 2014-10-09 09:17:44