[英]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.