Php 正则表达式以获取字符串中任意位置的speechmarks之间的字符串
我正在做一个项目,在这个项目中,我试图在一个字符串中的任意位置提取两个speechmark之间的字符串。除了一件事,它几乎可以工作 假设我有电话Php 正则表达式以获取字符串中任意位置的speechmarks之间的字符串,php,regex,Php,Regex,我正在做一个项目,在这个项目中,我试图在一个字符串中的任意位置提取两个speechmark之间的字符串。除了一件事,它几乎可以工作 假设我有电话 “04\/06\/2019 17:56:45:\t等待0秒读取日志“日志代理”的行 我将做两个正则表达式匹配,一个用于没有感叹号的字符串,例如,我将进行正则表达式搜索以匹配“耗时0秒”,另一个用于查找类似!“耗时0秒” 我使用下面的正则表达式来查找不以感叹号开头的字符串 $regex = '/[^.!](["\'])(?:(?=(\\\\?))\2.)
“04\/06\/2019 17:56:45:\t等待0秒读取日志“日志代理”的行
我将做两个正则表达式匹配,一个用于没有感叹号的字符串,例如,我将进行正则表达式搜索以匹配“耗时0秒”
,另一个用于查找类似!“耗时0秒”
我使用下面的正则表达式来查找不以感叹号开头的字符串
$regex = '/[^.!](["\'])(?:(?=(\\\\?))\2.)*?\1/m';
$matches = null;
preg_match_all($regex, $this->searchString, $matches, PREG_SET_ORDER, 0);
但是上面的正则表达式只匹配字符串,如果在字符串之前有什么东西,那么它没有找到任何东西
例如,如果搜索字符串为
“耗时0秒”
它找不到
如果是
其他一些内容“花费了0秒”
然后它在正则表达式匹配中正确地找到字符串花费了0秒
因此,基本上我要问的是,我如何改变我的正则表达式,它可以在任何地方提取语音标记之间的字符串,即使它在开头是正确的
更新
我正在创建一个搜索解析器来查找数据库中的某些字符串
数据库中的搜索将查找单个关键字(与此问题无关,很容易完成)和数据库中的特定字符串。因此,如果我的搜索字符串“花费了0秒“
,则数据库将返回任何包含记录的行耗时0秒
。如果搜索字符串为!“花了0秒”
然后我就可以检查数据库是否包含花了0秒
如果我的搜索字符串是keyword1关键字2“花了0秒”关键字3
然后正则表达式将返回“花了0秒”
下面是一个链接,它给出了一些例子,问题是什么,你会注意到第一个例子,它只是“花了0秒”自己没有得到匹配 正如评论中所指出的,您可以使用负面查找,而不是匹配字符类中的字符
您可能要做的是更新您的模式,以便只使用第一个捕获组。当您的模式使用或解决方案时,该模式可能如下所示:
(?<![.!])(["'])(?:(?!\1).)*\1
什么是演讲词?如果你的意思是引用,那么你的例子似乎与这些无关。我已经更新了我的问题。希望我已经澄清了一点我不确定我是否理解的东西,但是消极的回顾怎么样:(?如果你只是用这个正则表达式来代替(花了[0-9]+秒)
?请看这里:@Thefourthbird这似乎是我正在追忆的东西,谢谢,太棒了
(?<![.!])(["\']).*?\1