2013-06-27 64 views
2

感謝大家的回覆。
我想我必須稍微調整我的第一個問題。 由於$符號的定義,我有點困惑。 它只是聲稱在字符串的最後有6到10個字符。
就是這樣!對?然後,在我看來,它必須與我的測試字符串"123a56A781231231231241"匹配。因爲它不違反規則! 6-10字符串在字符串的最開始,在字符串的最後。完美,不是嗎?

另外,我想知道^(?=\w{6,10}$)^(?=\w{6,10})$之間的區別。

一個,卡西米爾等伊波利特你說的+並不能改變什麼,這僅僅意味着量詞({6,10}這裏)是佔有慾,不允許回溯。 這是否意味着+符號使$符號禁用?

謝謝你們提前。

在我進一步探討之前,我想讓大家知道,自從我開始學習正則表達式僅僅兩天了。我是完全新手。

首先。 ^(?=\w{6,10}$)這是模式。爲什麼美元信號必須在()之內?我知道這是一個愚蠢的問題,但我很好奇。我試圖找到()以外的美元符號。但它沒有像我預期的那樣工作。

二。我發現了幾個教程網站和它說的美元符號意味着

$可以在模式的結尾似乎需要的匹配一行的最後出現。例如,abc$比賽123abc但不abc123.

所以$被用來斷言字符串匹配的部分是在一行的末尾。對?

如果是真的,爲什麼這個模式:"^(?=\w{6,10}$)"不能與我的測試字符串匹配:"123a56A781231231231241"

如您所見,我的測試字符串在一行的最開始處包含6〜10個單詞字符,並且在行的最末尾處包含6〜10個單詞字符。

三。正如我前面提到的,這種模式:^(?=\w{6,10}$)不能與我的測試字符串匹配:"123a56A781231231231241"但是!如果我在\w{6,10}後面添加+後面的符號,如^(?=\w{6,10}+$) 它可以工作。 是因爲+符號是佔有慾?我的意思是,據我所知,+符號告訴發動機在比賽結束後不要回溯。所以我冒險猜測,美元符號並沒有做他的工作,因爲它甚至沒有回溯(當然,我不知道這一點,因爲我不知道$符號是如何工作的)。這樣對嗎?

+3

_it未按預期工作._這是什麼意思?它做什麼與你期望它做什麼? – Mathletics

+4

你應該檢查這個網站:http://www.debuggex.com/它可以讓你直觀地看到你的表情發生了什麼。非常酷的網站。 –

+1

我測試過perl和'^(?= \ w {6,10} + $)'不適用於字符串'123a56A781231231231241'(這很有意義,因爲'+'是佔有慾) – doubleDown

回答

2

(?=..)是一個超前,這是一個零寬度的斷言,這意味着它只是一個檢查和匹配沒有什麼。換句話說,前瞻意思是指後跟

圖案^(?=\w{6,10}$)手段:

begining字符串隨後6和10之間的單詞字符,直到所述字符串的末尾的。

請注意,沒有任何匹配的字符,因爲所有內容都在向前展示了^也是零寬度。

的匹配函數只能返回一個空字符串作爲匹配結果,但如果條件滿足(otherwhise假)

的+不會改變任何東西將返回true,這意味着只有量詞({6,10}這裏)是佔有慾,不允許回溯。有關此功能的更多信息,請執行以下操作:www.regular-expressions.info/possessive.html

+0

感謝您的回覆。不過,我有一個問題。你說過'+不會改變任何東西,這意味着只有量詞({6,10}這裏)是佔有慾,不允許回溯。'這是否意味着+符號使$符號禁用? – user2528192

+0

@ user2528192:不,它不是,其他量詞使它佔有後的'+',只意味着當正則表達式失敗時,正則表達式不能回溯到字符組中('\ w')。這裏並不重要。查看鏈接瞭解更多信息。 –

2
  1. 我不能幫助你,因爲我不知道你的意思。您是否想要與和中的測試字符串匹配?

  2. ^(?=\w{6,10}$)正試圖匹配字符串的開頭,接着是6-10個單詞字符和字符串的結尾。您的字符串超過10個字符,因此不匹配。

  3. 當您添加+它的6-10字符串一個或多個實例匹配。

    添加+應該仍然不匹配,因爲您希望匹配的字符串長度恰好爲6-10個字符,但測試字符串更長。在這種情況下使其佔有性不會改變匹配。

+1

'+'在這裏並不意味着「一個或多個實例」。這是一個佔有量詞。更多信息在這裏:http://www.regular-expressions.info/possessive.html –

+0

@CasimiretHippolyte酷,我不知道這一點。我已經更新了我的答案。 – Mathletics

3

如果這是你的整個正則表達式,你不需要預見。即這兩個正則表達式是等價的:

^(?=\w{6,10}$) 
^\w{6,10}$ 

爲什麼$需要在括號內?這是因爲(錨定)前瞻^(?= \ w {6,10})只是聲明在輸入前端有6到10個字符。但是,如果在輸入的前面有多於 6-10個字符,它將會成功。

通過將$放在前面,只有在輸入中存在6-10個字符的情況下才會成功。

如果您還想要另一個限制,您將只使用前視。例如,爲了匹配

6-10字字符,而 「一」 出現之前, 「B」

你可以使用正則表達式:

^(?=\w{6,10}$).*a.*b