2012-07-27 55 views
0

對不起,我奇怪的措辭,我不知道怎麼形容我需要做的簡潔...正則表達式得到匹配的子

我需要從提取零件號的第一部分從我們的系統數據庫返回的字符串。零件號碼具有通常的格式如下:

VENDOR FIRST123-SECOND123 

VENDOR是可選的,因爲是分離連字符。我需要結束FIRST123,或者如果沒有連字符,最後的整個「單詞」。

到目前爲止,我可以得到FIRST123-SECOND123有以下幾點:

[^ ]*$ 

我一直無法弄清楚如何分割導致比賽獲得前任何連字符的一切。想法?

+0

[你嘗試過什麼?](http://whathaveyoutried.com) – Bergi 2012-07-27 17:08:00

+1

我敢打賭,有可能是一個堆棧交換完全投入到正則表達式。 – 2012-07-27 17:14:26

+1

提示:重構您的數據庫;-) – Bergi 2012-07-27 17:21:18

回答

1

你可以使用lookahead

/[^-\s]+(?=\S*$)/ 

這捕獲的是從最終只能由非空格隔開的非連字符,非空白字符的第一序列。

但是,我會說字符串方法會有更多的幫助。獲取lastIndexOf(" "),然後從那裏獲得firstIndexOf("-"),然後獲取它們之間的子串。

+0

這不起作用...但是,在查看一些可能的條目後(請參閱上面的「自由格式文本」註釋),我認爲使用字符串函數會更好。我會給你這個建議的答案:) – DaveN59 2012-07-27 18:08:52

+0

嗯,workforme(用你的輸入例子)。你使用哪種語言,你設置了哪些匹配選項? – Bergi 2012-07-27 18:22:43

+0

我使用Expresso使用默認參數來構建/測試我的正則表達式。如果我離開前後斜槓字符,我不會得到任何匹配。如果我刪除它們,我會同時獲得FIRST123和SECOND123。 – DaveN59 2012-07-31 18:23:34

1

這裏是我的正則表達式來得到你想要的東西:

[^ ]*\w*(?=-) 

你很好開始。 \w*說「得到所有單詞的字符」(字母和數字),並且(?=-)說「最多一個跟着一個破折號」

+0

'[^] *'有什麼好處?我擔心,如果沒有發現破折號,這與「\ w *」一起甚至可能導致災難性的回溯。 – Bergi 2012-07-27 17:27:42

+0

[^] *是跳過任何前導空格分隔的單詞。這對我也不起作用,不是因爲正則表達式不起作用,而是由於我的源文本的非結構性。還是)感謝你的建議! – DaveN59 2012-07-27 18:10:24

0

不妨把我的建議扔在那裏。聲明第二個零件編號後不再有文字。

/[a-zA-z]\+\d\+[^$]