我想有一個正則表達式模式匹配的行:
1,本行必須包含字符串的末尾不能「單詞「S200」
2.消費滿」,‘爵士’,‘JSON’,‘CSS’正則表達式來排除模式,但包括圖案
這裏是一個怪物我,不工作
(?=^.*$(?<!sping)(?<!js)(?<!css)(?<!json))(?=s200)
我是新來的正則表達式,任何幫助,將aapreciated !
我想有一個正則表達式模式匹配的行:
1,本行必須包含字符串的末尾不能「單詞「S200」
2.消費滿」,‘爵士’,‘JSON’,‘CSS’正則表達式來排除模式,但包括圖案
這裏是一個怪物我,不工作
(?=^.*$(?<!sping)(?<!js)(?<!css)(?<!json))(?=s200)
我是新來的正則表達式,任何幫助,將aapreciated !
對於初學者來說,你的正則表達式不匹配任何東西,因爲你只有你的正則表達式。
?= # look ahead for match
?<! # negative look behind
換句話說,你不匹配任何東西,你的正則表達式,你正在尋找一個字符串position
。
解釋:
(?= # pos. lookahead
^.*$ # read anything
# and AFTER reading everything, check
(?<!sping) # if you have NOT read sping
(?<!js) # if you have NOT read js
(?<!css) # if you have NOT read css
(?<!json) # if you have NOT read json
)
(?=s200) # from this position, check if there's "s200" ahead.
結論:你的正則表達式永遠不會滿足您的要求。
你可以只用一個正則表達式解決這個問題,例如使用:
(.*)s200(.*)$(?<!css|js|json|sping)
它說
.* # read anything
s200 # read s200
.* # read anything
$ # match the end of the string
(?<!css|js|json|sping) # negative lookbehind:
# if you have read css,js,json or sping, fail
你可以在兩個步驟做到這一點很簡單:
/s200/
/css|js(on)?|sping$/
您已經標記這是perl
,所以這裏是一個perl
解決方案:
$_ = $stringToTest;
if (/s200/) {
# We now know that the string contains "s200"
if (/sping|json|js|css$/) {
# We now know it end with one of sping,json,js or css
}
}
您應該解釋爲什麼OP的工作不起作用,因爲這是個問題。 –
這_must_是正則表達式? –
'(?s)^(?!sping $)(?!js $)(?! css $)(?! json $)(?= s200)' –