簡體   English   中英

Ruby 正則表達式計數字符

[英]Ruby regex counting characters

我正在嘗試在 ruby 中創建一個正則表達式,它與具有 10 個非特殊字符的字符串匹配,即與\w匹配。 到目前為止,我已經提出了這個: /\w{10,}/但問題是它只會計算連續的單詞字符序列。 我想匹配任何至少有 10 個“單詞”字符的字符串。 這可能嗎? 我對整個正則表達式相當陌生,因此將不勝感激。

如果我理解正確,這應該有效:

/(?:\w[^\w]*){9,}\w/

解釋:

我們從一個單一的

\w

我們想要捕獲所有其他字符,直到另一個\w ,因此:

\w[^\w]*

[^<list of chars>]匹配括號中未列出的任何字符,因此[^\w]表示任何不是單詞字符的字符。 *表示 0 或更多。 以上將匹配"a-- ""b""c!" "a-- bc!" 細繩。

由於我們需要 10 個 \w,我們將匹配 9 個(或更多)這樣的組,然后是單個 \w

(\w[^\w]*){9,}\w

我們並不真正關心這里的捕獲(特別是因為 ruby 無論如何都會忽略重復的組捕獲,所以我們使組不捕獲)

(?:\w[^\w]*){9,}\w

或者,我們可以只使用更簡單的正則表達式:

(?:\w[^\w]*){10,}

但它也將覆蓋字符串中最后一個單詞字符之后的字符 - 不確定這里是否需要。

匹配字符串中的任意位置:

/\w(?:\W*\w){9,19}/
/(?:\W*\w){10,20}/

驗證長度為 10 到 20 個字符的字符串:

/\A(?:\W*\w){10,20}\W*\z/

首選非捕獲組,尤其是在提取找到的匹配項時。

注意^$在 Ruby 的正則表達式中分別標記行的開始和結束。

解釋

--------------------------------------------------------------------------------
  \A                       the beginning of the string
--------------------------------------------------------------------------------
  (?:                      group, but do not capture (between 10 and
                           20 times (matching the most amount
                           possible)):
--------------------------------------------------------------------------------
    \W*                      non-word characters (all but a-z, A-Z, 0-
                             9, _) (0 or more times (matching the
                             most amount possible))
--------------------------------------------------------------------------------
    \w                      word characters (a-z, A-Z, 0-9, _) 
--------------------------------------------------------------------------------
  ){10,20}                 end of grouping
--------------------------------------------------------------------------------
  \W*                      non-word characters (all but a-z, A-Z, 0-
                           9, _) (0 or more times (matching the most
                           amount possible))
--------------------------------------------------------------------------------
  \z                       the end of the string

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM