2014-10-10 108 views
1

我得到它在更高級別上的功能......它檢測到重複的單詞。我難以理解的是這種工作方式的邏輯。我希望你能糾正我,如果我的理解是關閉的。其他細節假設我在Linux機器上使用grep。不知道我是否理解正則表達式:( b w +) 1 b?

  1. \ b將檢測到第一個字符。
  2. \ w +會掃描字母。

現在我對此感到困惑。

  • 括號將「店」的字母到第一空間或真第二\ b
  • 那麼/ 1將重複步驟1到3,然後比較,並且如果他們匹配...顯示。
  • 如果可能的話,我將不勝感激外行人的條款。

    回答

    3

    (\b\w+) \1\b發現檢測重複。例如,abc abcaaa aaax123_ x123_

    一個單詞是單詞字符的一個序列,如下定義。

    A 單詞字符取決於模式(ASCII,區域設置或Unicode)將匹配字母表(可以取決於語言環境),數字(可以取決於語言環境)和下劃線。

    \b檢測單詞邊界,這是在那裏你可以之前或之後(但不能同時)找到字字符的位置。

    上面的正則表達式有一個小缺陷。如果單詞重複3次以上,它只會去掉一半的重複的單詞,用捕捉組1

    +0

    考慮在第二部分之前添加空格。 – 2014-10-10 04:05:50

    +0

    行了。標題中的空間不是很明顯。 – nhahtdh 2014-10-10 04:08:44

    +0

    +1對於很好的解釋。 – Braj 2014-10-10 04:19:06

    0

    \ 1是反向引用,意味着它與最後一個捕獲組匹配。 在這種情況下,\ b \ w是捕獲組,因此\ 1匹配上次捕獲的組。

    更多關於反向引用可以在這裏 http://www.regular-expressions.info/backref.html

    +0

    * \ 1場比賽最後拍攝組*它是正確的嗎? – Braj 2014-10-10 04:21:09

    +0

    我的意思是第一個被捕獲的組。在這種情況下,最後一個字。 – 2014-10-10 04:29:58

    1

    當更換模式說明:

    (      group and capture to \1: 
        \b      the word boundary 
        \w+      word characters (a-z, A-Z, 0-9, _) (1 or more times) 
    )      end of \1 
              ' ' 
        \1      what was matched by capture \1 
        \b      the word boundary 
    

    如果您正在使用\w捕獲AZ, AZ,0-9,_因此,您不需要指定用於字邊界的第一個\b

    \1是與第一組匹配的反向引用。

    這裏括號(...)用於製作組。

        (\b\w+) \1\b 
    First Group ------^^^^^^ ^-------- Match First Group again 
    

    Online demo

    +0

    如果已經使用了'\ w','\ b'不需要。 – Braj 2014-10-10 04:15:00

    +0

    如果我們對單詞感興趣,那麼是第二個'\ b'是必要的。 – Braj 2014-10-10 04:16:45

    相關問題