2012-08-04 68 views
1

例如,我有以下字符串:"http://www.google.com/this_is_our_network/"如何使用正則表達式來匹配帶邊界的單詞?

我想匹配單詞「工作」,但在開始或結束時沒有字母字符。在上面的例子中,正則表達式不應該返回一個匹配。

但是,在這個字符串中:"http://www.google.com/work_for_us.html"正則表達式應該找出匹配,因爲在開始和結束時都沒有字母字符。

回答

4

試試這個正則表達式:(?<=[\W_])work(?=[\W_])

它使用積極前瞻,看看隱藏斷言尊重封閉字符,但不包括他們在比賽中。

此正則表達式匹配work

  1. 如果它遵循一個\W字符或下劃線
    AND
  2. 如果它後面是\W字符或下劃線。

\b的單詞邊界匹配不能因爲_比賽\w這裏沒有想要使用。


進一步的實例:

  • 匹配的多個詞:
    (?<=[\W_])(work|job)(?=[\W_])

  • 同上,但不創建子匹配:
    (?<=[\W_])(?:work|job)(?=[\W_])

  • 另外尊重線端:
    (?<=[\W_])(?:work|job)(?=[\W_]|$)


一些有用的筆記關於正則表達式的語法:

  • \w匹配所有字母數字字符和下劃線;這等同於[a-zA-Z0-9_]

  • \W\w

  • \b匹配邊界的\w\W字符(或反之亦然)

  • 正先行斷言之間完全相反的相符:
    foo(?=bar)匹配foo後面跟着bar,不包括bar在比賽中。

  • 正向後看斷言:
    (?<=foo)bar匹配bar如果按照foo,而不包括在比賽foo

有關的進一步信息(蟒)的正則表達式語法考慮python regex docsperl regex docs。此外,基於網絡的Python Regex Tool便於測試。

+1

你只是忘了'_'不是一個邊界... – JBernardo 2012-08-04 12:34:17

+0

@Jernardo謝謝,我會糾正我的答案。 – speakr 2012-08-04 12:36:51

+0

謝謝 - 這個伎倆。 如果你可以進一步解釋,這將是很好的。 – DjangoPy 2012-08-04 12:57:21

相關問題