簡體   English   中英

php正則表達式將重復列表與單個出現組合並排除整個單詞

[英]php regex combine repeated list with single occurrence and exclude whole words

我在替換一些文本信息所需的正則表達式任務中失敗了。

以下任務也可以在非正則表達式中完成,但如果在正則表達式中使用它會很好,因為有很多可以替換。

然而問題是:

  • 在集合[\\w\\. \\&\\=\\?\\-\\(\\)\\'\\+] [\\w\\. \\&\\=\\?\\-\\(\\)\\'\\+]可以出現 3-99 次,所以寫: [\\w\\. \\&\\=\\?\\-\\(\\)\\'\\+]{3-99} [\\w\\. \\&\\=\\?\\-\\(\\)\\'\\+]{3-99}
  • 在列表中一個換行符可以出現一次,所以寫\\n?
  • 在這個字符之后出現一個固定的字符串,所以只需寫: <test@mail.se>
  • 但在字符列表中不應出現“for”一詞

所以如果我使用: ((?!for)[\\w\\. \\&\\=\\?\\-\\(\\)\\'\\+]{3,99}|(\\n?))<test@mail\\.se>單詞 'for' 將被匹配。 有沒有人有想法?

例如:在這個字符串中:

    To: Lasse Erikson <test@mail.se>

我想匹配姓名和郵件。

甚至在這里:

To: Lasse Erikson <test@mail.se>, Sara
    Larsson <mail@mail.se>

但在這里我不想取任何東西:

 for <test@mail.se>; Thu, 14 Dec 2017 21:18:22 +0100 (CET)

因為行中有一個“for”。

我希望你明白這一點...

先感謝您

PHP(PCRE)提供了一些動詞跳過或失敗的電流匹配的過程,你可以用它來跳過字for或失敗的整場比賽,如果你想:

((?(?=\bfor\b)for(*SKIP)(*F))[ \w.(&=?\-+)](?(2)|(\R)?)){3,99}<[^<>@]*@[^<>]*>

現場演示

分解:

(   # Start of capturing group #1
    (?(?=\bfor\b)for(*SKIP)(*F))    # Skip over `for` if any
    [ \w.(&=?\-+)]  # Match whitelist characters
    (?(2)|(\R)?)    # One newline character between
){3,99} # Between 3 or 99 times, end of CG #1
<[^<>@]*@[^<>]*> # Match an email format

暫無
暫無

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

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