2010-10-10 68 views
1

我需要一個正則表達式來匹配非常特定的句子格式。格式如下:需要用於匹配特定句子格式的正則表達式

字(可以包含,()[]&^%# and whitespace),文字(可以包含,()[]&^%# and whitespace),文字(可以包含,()[]&^%# and whitespace

所以基本上它是一個字,字,詞,但每一個字可以包含一些特殊字符和空格。有人能幫助我嗎?


這些都是例子:

  1. 羣星,共6個,我建 這個城市(邁克爾·邁耶混合)
  2. 阿達, Blindhouse/Luckycharm,Luckycharm
  3. 赫克託, Orale,Orale(Alex Picone 混音)
+0

什麼構成你的「單詞」?只有小寫字母字符?單詞往往不包括空格... – 2010-10-10 12:04:23

+0

好吧,你是對的 - 它是句子,句子,句子。它們可以是小寫字母和大寫字母。 – Pavel 2010-10-10 12:08:53

+0

我不認爲你的模式是清楚的描述。也許你可以發表一個例子。 – 2010-10-10 12:10:19

回答

2

我會用這個解決方案:

/(?x)([a-z\\d\\s()[\\]&^%#\\/]+),((?1)),((?1))/i 

這樣,您就不必再重複你的格局。

Code on ideone

+0

但是,如果第一個單詞重複三次,那麼這不會起作用嗎? – 2010-10-10 12:41:37

+1

@Nev斯托克斯,而不是(見ideone上的代碼)它使用子模式。它不是'1'。 – 2010-10-10 12:44:21

+0

+1對我來說是新的。你能提供參考嗎? (僅在手冊中找到'\ 1'。) – NikiC 2010-10-10 14:17:09

1

我不確定您想要包含在允許的模式中分隔您的句子的,。如果你想三次匹配的一句話:

/^[a-z()[]&^%#\s]+,[a-z()[]&^%#\s]+,[a-z()[]&^%#\s]+$/i 
+0

我剛剛注意到,你的第二個例子中有一個/它與你定義的模式不匹配。 – 2010-10-10 12:16:08

+1

無需轉義所有這些字符;在字符類中只有'\'和']'(取決於位置還有'^'和'-')是需要轉義的特殊字符。所以'[a-z()[\\]&^%#\ s]'就足夠了。 – Gumbo 2010-10-10 12:21:36

+0

當然,傻我!編輯以反映您的評論 – 2010-10-10 12:23:50