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