Php 正则表达式来提取字符串部分
我有这个字符串: Le serveur a retournéune erreur“500在执行'select DIVISIONTEST(4,0)from dual':SQLSTATE[HY000]:一般错误:20000 OCIStmetExecute:ORA-20000:Bien ATSOURCEé!ORA-06512:a“FOO.DIVISIONTEST”,第8行(ext\pdo_oci\oci_statement.c:148)” 我只想展示这一部分:Php 正则表达式来提取字符串部分,php,regex,Php,Regex,我有这个字符串: Le serveur a retournéune erreur“500在执行'select DIVISIONTEST(4,0)from dual':SQLSTATE[HY000]:一般错误:20000 OCIStmetExecute:ORA-20000:Bien ATSOURCEé!ORA-06512:a“FOO.DIVISIONTEST”,第8行(ext\pdo_oci\oci_statement.c:148)” 我只想展示这一部分:Bien此部件之前或之后无任何内容 此字符
Bien代码>此部件之前或之后无任何内容
此字符串由以下命令生成:
$exception->getMessage()
你能帮我学一下正则表达式吗?
谢谢
编辑:抱歉,自定义消息将更改。我应该更精确一些。我正在寻找一种方法,在下面的ORA:
之后和ORA:
之前获取消息。
我试图从PL/SQL请求中获取引发的异常。引发的错误是一条自定义消息编辑:在原始帖子更改后更新:
$re = '/OCIStmtExecute: ORA-[0-9]+: (.+) ORA-[0-9]+:/';
$subject = $exception->getMessage();
preg_match($re, $subject, $matches);
print_r($matches);
因为您只想匹配一个案例,所以可以使用:preg\u match
请参阅PHP手册:
例如:
$subject = $exception->getMessage();
$pattern = '/Bien essayé!/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
谢谢kevinabelita,你在我写这篇文章的5秒钟前编辑了我的文章代码>以后会更改吗?如果只提供一个可能异常字符串的实例,则很难找到一个有效的正则表达式。你能给我们更多的例子说明你需要从哪些类型的异常中提取消息吗?对不起,你是对的。我编辑了我的postAh谢谢,我测试了它,我得到了警告:preg_match():分隔符不能是字母数字或反斜杠
编辑:它需要反斜杠。但是我的数组是空的。我一直试着写感谢信,但忘了带分隔符。更新。
<?php
if (preg_match("/Bien essayé!/i",$exception->getMessage())
echo : "Bien essayé!";
else
echo "Pas bien essayé :-D ";
?>