2010-11-22 19 views
0

我有一個複雜的正則表達式,我想申請。這是我的模式:如何正確地轉義此字符串?

/(?:^|\s|[\.(\+\-\,])(?:\$?)\$((?:[0-9]+(?=[a-z])|(?![0-9\.\:\_\-]))(?:[a-z0-9]|[\_\.\-\:](?![\.\_\.\-\:]))*[a-z0-9]+)/i 

我怎樣才能聲明這是一個字符串,並確保一切都逃脫?

+1

第一步:通過擺脫不必要的反斜槓和組簡化你的模式:`/(?:[|[\s.(+,-])\$?\$((?:[0-9]+ (?= [AZ])|(?![0-9.:_-]))(?:[a-z0-9]|[.:_-](?![.:_-])) * [a-z0-9] +)/我' – Gumbo 2010-11-22 18:06:58

回答

2

在我看來,好像有在正則表達式很多不必要的東西

  1. 喜歡的東西(?:\$?)相同,只是\$?
  2. 沒有必要「保護」了「‘‘_’,’,」或‘+’字在方括號組

那麼你真正可以擁有的是:

/(?:^|\s|[.(+\-,])\$?\$((?:[0-9]+(?=[a-z])|(?![0-9.:_\-]))(?:[a-z0-9]|[_.\-:](?![._\-:]))*[a-z0-9]+)/i 

至於把它在一個字符串,你真的不必擔心這裏的反斜槓。那些需要加倍(「\」)。外部的「/」字符將被丟棄,並且尾隨的「i」修飾符將被傳遞到Pattern.compile()方法中。

0

如果你想測試這種模式,我建議你看看使用正則表達式工具,如gskinner。它可以讓你放入一個模式,一個字符串,並突出顯示匹配。

2

只要有點靜態的解決方案就足夠了,並且如果您使用Eclipse IDE,則可以選擇在從剪貼板粘貼時正確轉義字符串。

首選項 - >爪哇 - >編輯 - >鍵入 - > [X]粘貼時逃生的文字...

相關問題