亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式:有AND操作符嗎?

正則表達式:有AND操作符嗎?

千巷貓影 2019-06-01 14:23:00
正則表達式:有AND操作符嗎?顯然,您可以使用|(煙斗?)代表OR,但是有沒有一種方法來代表AND也是?具體來說,我想匹配包含所有特定短語的文本段落,但不按特定順序排列。
查看完整描述

4 回答

?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

使用不使用的正則表達式。

典型的(即Perl/Java)表示法是:

(?=費用)

意思是“匹配”費用但在此之后,繼續在原來的匹配點進行匹配?!?/trans>

你可以做很多你想做的,這將是一個“和”。例子:

(?=match this expression)(?=match this too)(?=oh, and this)

如果需要保存其中的一些數據,甚至可以在非消費表達式中添加捕獲組。


查看完整回答
反對 回復 2019-06-01
?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

您需要像其他響應者所說的那樣使用查找,但是查找必須考慮目標單詞與當前匹配位置之間的其他字符。例如:

(?=.*word1)(?=.*word2)(?=.*word3)

這個.*在第一個查找中,它可以在獲得“word 1”之前匹配它需要的字符數。然后,重新設置匹配位置,第二次向前查找“Word2”。再次重置,最后部分與“word 3”匹配;因為它是您要檢查的最后一個單詞,所以沒有必要讓它處于前瞻性,但它并不會造成傷害。

為了匹配整個段落,您需要將正則表達式錨定在兩端,并添加一個最終結果。.*若要使用其余字符,請執行以下操作。使用Perl樣式的表示法是:

/^(?=.*word1)(?=.*word2)(?=.*word3).*$/m

“m”修飾符用于多行模式;它允許^$在段落邊界處匹配(在regex語言中為“線邊界”)。在這種情況下你必須使用‘s’修飾符,它允許點元字符匹配換行符以及所有其他字符。

最后,您希望確保您匹配的是整個單詞,而不僅僅是較長單詞的片段,因此您需要添加單詞邊界:

/^(?=.*\bword1\b)(?=.*\bword2\b)(?=.*\bword3\b).*$/m


查看完整回答
反對 回復 2019-06-01
?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

看看這個例子:

我們有兩個regexps A和B,我們希望匹配它們,所以在偽代碼中如下所示:

pattern = "/A AND B/"

不需要像這樣使用and操作符就可以編寫它:

pattern = "/NOT (NOT A OR NOT B)/"

在PCRE中:

"/^(^A|^B)/"regexp_match(pattern,data)


查看完整回答
反對 回復 2019-06-01
?
達令說

TA貢獻1821條經驗 獲得超6個贊

您可以使用正則表達式來實現這一點,但是您可能還需要其他的表達式。例如,使用幾個regexp并將它們合并到一個if子句中。

您可以使用標準regexp枚舉所有可能的排列,如下所示(按任何順序匹配a、b和c):

(abc)|(bca)|(acb)|(bac)|(cab)|(cba)

但是,如果您有兩個以上的術語,這就會產生一個非常長的、可能效率很低的regexp。

如果您使用的是一些擴展的regexp版本,比如Perl或Java版本,那么它們有更好的方法來做到這一點。其他答案建議采取積極的前瞻性行動。


查看完整回答
反對 回復 2019-06-01
  • 4 回答
  • 0 關注
  • 4436 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號