Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在php中使用长正则表达式字符串

如何在php中使用长正则表达式字符串
EN

Stack Overflow用户
提问于 2012-02-10 14:49:38
回答 2查看 537关注 0票数 1

我有这个正则表达式字符串,它是我从一个网站上获得的,用于从文件中提取电子邮件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

我已经在正则表达式伙伴( regex测试软件)中测试了它,并且它可以工作!

当我从正则表达式伙伴复制并粘贴正则表达式到我的php文件中时,我必须转义2个"字符才能使正则表达式在php中形成一个有效的字符串。

在php中,我这样使用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$file = file_get_contents(/* URL TO GET */);

$email_pattern = "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])";

$matches = array();

if ( preg_match_all ( $email_pattern, $file, $matches ))
{
    echo print_r($matches, true);
}

但是我得到了这个警告!?!?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '@'

然而,这个正则表达式在regex伙伴中工作吗?

我哪里错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-10 14:52:08

2件事:

步骤1:

您需要在regex之前和之后添加分隔符(/,以便可以添加修饰符):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$email_pattern = "/(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/";

step2:

当您在PHP字符串中时,您需要转义所有特殊字符(如\,它必须变成\,$将变成\$,等等……)

因此,在PHP字符串中包含正则表达式的转义应该如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(?:[a-z0-9!#$%&\'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&\'*+/=?^_`{|}~-]+)*|\\\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\\\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])

您还必须转义/,因为我们使用该字符作为第一步的分隔符。所以我们需要正则表达式来查看\/,但是当我们在php字符串中表示正则表达式时,我们将把/替换为\/

如果我是对的--通常我也使用正则表达式伙伴来使用PHP工具进行转换,但现在我没有它,所以我手动完成了--它应该给像这样的这样的东西:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$email_pattern = '/(?:[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/';

我还建议您将字符串放在单引号内。

票数 4
EN

Stack Overflow用户

发布于 2012-02-10 14:55:53

我试过了然后..。

单引号将给出一个错误...

使用双引号和{}作为分隔符//也会给出错误

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9229592

复制
相关文章
X86如何实现函数调用?
的空间保存数据,用户地址空间3G从0x0000000到0xC0000000,内核空间1G从0xC0000000到0xFFFFFFFF。
mingjie
2022/11/30
2.8K0
X86如何实现函数调用?
X86函数调用模型分析
的空间保存数据,地址从0x00000000到0xFFFFFFFF(一个十六进制为对应4个二进制位,所以是2的32次方)。
mingjie
2022/08/03
1.2K0
X86函数调用模型分析
java 如何实现短函数调用?
在Java中,可以使用lambda表达式来实现短函数调用。Lambda表达式是一个匿名函数,它可以传递给方法或存储在变量中,以便在需要时使用。
IT千锋教育
2023/05/24
6510
java 如何实现短函数调用?
如何禁止函数的传值调用
按照参数形式的不同,C++应该有三种函数调用方式:传值调用、引用调用和指针调用。对于基本数据类型的变量作为实参进行参数传递时,采用传值调用与引用调用和指针调用的效率相差不大。但是,对于类类型来说,传值调用和引用调用之间的区别很大,类对象的尺寸越大,这种差别越大。
恋喵大鲤鱼
2018/08/03
2.8K0
java怎样调用oracle存储函数_oracle如何调用存储过程
之前给大家介绍了java代码调用存储过程,下面要给大家介绍的就是java当中调用oracle存储过程,一起来看看吧。
全栈程序员站长
2022/11/19
2.7K0
java怎样调用oracle存储函数_oracle如何调用存储过程
Linux内核如何替换内核函数并调用原始函数
已经多久没有编程了?很久了吧…其实我本来就不怎么会写代码,时不时的也就是为了验证一个系统特性,写点玩具而已,工程化的代码,对于我而言,实在是吃力。
Linux阅码场
2019/10/08
3.4K0
Linux内核如何替换内核函数并调用原始函数
Nginx如何限制每秒请求次数,限制每秒连接次数,下载速度限制?
Nginx是一款常用的高性能Web服务器和反向代理服务器,其优秀的性能和可扩展性使得它广泛应用于各种网络应用和场景中。在实际使用过程中,为了保障系统的稳定性和安全性,需要对Nginx进行一定的配置和优化。其中,限制每秒请求次数、限制每秒连接次数和下载速度限制等技术是非常重要的配置项之一。
网络技术联盟站
2023/06/08
5.8K0
Nginx如何限制每秒请求次数,限制每秒连接次数,下载速度限制?
MySQL 每秒 570000 的写入,如何实现?
一个朋友接到一个需求,从大数据平台收到一个数据写入在20亿+,需要快速地加载到MySQL中,供第二天业务展示使用。
芋道源码
2019/03/08
1.5K0
MySQL 每秒 570000 的写入,如何实现?
一个朋友接到一个需求,从大数据平台收到一个数据写入在20亿+,需要快速地加载到MySQL中,供第二天业务展示使用。
数据和云01
2019/07/10
1.6K0
GO语言如何调用C写的函数
1.C 文件 #include <stdio.h>   #include <stdlib.h>   extern int sun(int a, int b) {   return a + b;   }   2 GO调用实例 package main   // #include "c_fun.h"   import "C"   import "fmt"   func main() {   fmt.Println("go call c: 3+4=", C.sun(3, 4))   }  
李海彬
2018/03/27
3K0
通过反汇编理解函数调用机制(x86和ARM)
在分析上面的汇编程序之前,需要了解rbp、rsp为栈基址寄存器、栈顶寄存器,分别指向栈底和栈顶;edx、eax、esi、edi均为x86CPU上的通用寄存器,可以存放数据(虽然它们还有别的作用,但是本文章不涉及)
用户7043923
2020/03/12
2K0
如何优化 SQLite 每秒的插入操作
SQLite 的优化比较棘手,就批量插入而言,其速度可以从每秒 85 条优化到每秒 96,000 条。下面我们来具体看下实验过程和结果,
ClearSeve
2022/02/10
3.4K0
MySQL 每秒 570000 的写入,如何实现?
一个朋友接到一个需求,从大数据平台收到一个数据写入在20亿+,需要快速地加载到MySQL中,供第二天业务展示使用。
数据和云
2019/07/15
2.4K0
MySQL 每秒 570000 的写入,如何实现?
浅谈如何定义和调用Python的函数
本文主要介绍了如何定义和调用Python函数。首先介绍了函数的概念和作用,然后详细讲解了如何定义函数和调用函数,最后列举了一个例子来加深理解。
企鹅号小编
2018/01/03
2K0
浅谈如何定义和调用Python的函数
Unity WebGL 程序如何调用Java Script函数
在WebGL的程序中我们可能需要与网页上的其他元素进行通信,或者需要调用一些其他的Web API,本文介绍如何在Unity脚本中调用Java Script函数。
CoderZ
2022/08/29
1.4K0
Unity WebGL 程序如何调用Java Script函数
MySQL 每秒 570000 的写入,如何实现?
一个朋友接到一个需求,从大数据平台收到一个数据写入在20亿+,需要快速地加载到MySQL中,供第二天业务展示使用。
Java团长
2019/03/04
1.3K0
函数调用时栈是如何变化的?
大家都知道函数调用是通过栈来实现的,而且知道在栈中存放着该函数的局部变量。但是对于栈的实现细节可能不一定清楚。本文将介绍一下在Linux平台下函数栈是如何实现的。
嵌入式与Linux那些事
2021/12/17
3.6K0
函数调用时栈是如何变化的?
【说站】javascript new如何调用构造函数
以上就是javascript new调用构造函数,希望对大家有所帮助。更多Javascript学习指路:Javascript
很酷的站长
2022/11/23
1.2K0
【说站】javascript new如何调用构造函数
点击加载更多

相似问题

中的nltk pos_tag错误

12

NLTK:柠檬和pos_tag

13

NLTK 3 POS_TAG抛出UnicodeDecodeError

511

NLTK pos_tag模块返回LookupError

12

如何优化NLTK pos_tag操作?

112
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文