有人可以用正則表達式來幫助我找到使用這個規則的語句嗎?正則表達式也有一定的字母,並且至少有一個字母組合
字需要具有字母 「J U,G」(只是字母不是順序),並且這些字母中的至少一個:G,L,E,R,S
,所以我可以搜索壺,雜耍,雜技,玩雜耍,列表等
感謝
有人可以用正則表達式來幫助我找到使用這個規則的語句嗎?正則表達式也有一定的字母,並且至少有一個字母組合
字需要具有字母 「J U,G」(只是字母不是順序),並且這些字母中的至少一個:G,L,E,R,S
,所以我可以搜索壺,雜耍,雜技,玩雜耍,列表等
感謝
你的問題完全不借給自己的正則表達式很好的第一部分。這種模式最終會導致混亂,並且只會增加更多所需字符。
第二部分,但是,很簡單:
m/[glers]/i
所以我建議兩個部分實施解決方案。這取決於你的語言:
var chars = "GJU"; // characters are sorted.
if (inputstring.ToUpper().Intersect(chars).OrderBy(c => c).SequenceEqual(chars)) {
// do stuff if match.
}
my @chars = sort split '', 'GJU'; # Transform into sorted array.
my %input = map{($_, 1)} split '', uc $inputstring; # stores unique chars from string.
if (@chars ~~ %input) { # Smart match performs hash key intersection.
# Do stuff in here.
}
chars = set('jug')
input = set(inputstring)
if chars == (chars & input):
# do something here
如果你用一個詞在同一時間工作,試試這個:
boolean isMatch = s.matches(
"(?i)^(?:J()|U()|G(?!.*G)()|[GLERS]()|\\w){4,}+$\\1\\2\\3\\4");
如果你正在尋找在一個較長的字符串匹配:
Pattern p = Pattern.compile(
"(?i)\\b(?:J()|U()|G(?!.*G)()|[GLERS]()|\\w){4,}+\\b\\1\\2\\3\\4");
Matcher m = p.matcher(s);
while (m.find()) {
String foundString = m.group();
}
每次第一四種備選方法之一 - J()
,U()
,G()
或[GLERS]()
- 匹配一些東西,它後面的空組「捕獲」什麼(即空字符串)。當到達字符串末尾時,每個反向引用 - \1
,\2
等 - 嘗試匹配與其對應組匹配的相同內容:不再有任何內容。
很顯然,這將永遠成功;你可以隨時匹配註釋。訣竅是反向引用甚至不會嘗試匹配,如果其相應的組沒有參與匹配。也就是說,如果目標字符串中沒有j
,則J()
備選中的()
永遠不會涉及。當正則表達式引擎稍後處理反向引用時,它會立即報告失敗,因爲它知道該組未參與匹配。
通過這種方式,空的組的行爲就像一個複選框,反向引用確保所有的框都被檢查過。雖然有一個皺紋。 G()
和[GLERS]()
替代方案都可以匹配g
;你如何確保他們在需要時參加比賽?第一個正則表達式我試過了,
"(?i)^(?:J()|U()|G()|[GLERS]()|\\w){4,}+$\\1\\2\\3\\4"
...未能匹配單詞「jugg」因爲G()
替代被消耗都g
的; [GLERS]()
從未有機會參與。所以我增加了負面預測 - (?!.*G)
- 現在它只匹配最後g
。如果我有三種替代方案可以匹配g
,那麼我必須將第一個(?!.*G.*G)
和(?!.*G)
加到第二個。但實際上,在我達到這一點之前,我可能會轉向另一種方法(可能不涉及正則表達式)。 ;)
但您的示例'lugger'沒有全部的'J','U'和'G' – anubhava 2011-05-31 22:53:27
抱歉,已更新。 – Kamran224 2011-05-31 23:24:47
沒有意義。需要和至少有什麼區別?爲什麼G在兩個? – manojlds 2011-05-31 23:28:36