php 正则表达式将重复列表与单次出现相结合并排除整个单词
php regex combine repeated list with single occurrence and exclude whole words
我需要替换一些文本信息的正则表达式任务失败了。
以下任务也可以在非正则表达式中完成,但如果将它放在正则表达式中会更好,因为有很多要替换。
然而问题是:
- 在集合
[\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
我需要替换一些文本信息的正则表达式任务失败了。
以下任务也可以在非正则表达式中完成,但如果将它放在正则表达式中会更好,因为有很多要替换。
然而问题是:
- 在集合
[\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