gpt4 book ai didi

regex - 从匹配条件结束开始匹配的正则表达式

转载 作者:行者123 更新时间:2023-12-04 16:27:16 25 4
gpt4 key购买 nike

我想从 正则表达式 中的 or 条件的结果末尾开始匹配。

$a = 'SI-#CL#¤1801 BARBER LANE#CL#MILPITAS CA 95035#CL#FONE 1-408-943-0600#CL#FAX 1-408-943-0484#CL#¤CANCEL BY 5 PM - RQST-NO FEATHER';
$pat = '/^(?(?=SI)(?<matchfromend>[A-Z]+$)|(?<else>.*))/';

我想匹配 CANCEL BY 5 PM - RQST-NO FEATHER 仅当字符串从 SI- 开始时

有什么建议吗??

谢谢

最佳答案

你的 (?(?=SI)(?<matchfromend>[A-Z]+$)正则表达式部分不消耗从字符串开头到结尾的任意字符 (?<matchfromend>[A-Z]+$模式。

您可以使用以下正则表达式:

'~^(?(?=SI).*#¤(?<matchfromend>.+$)$|(?<else>.*))~'

参见 regex demo

解释:

  • ^ - 字符串开始
  • (?(?=SI).*#¤(?<matchfromend>.+$)$|(?<else>.*)) - 有条件的:
    • 如果SI出现在开头 ( (?=SI) ) 匹配除换行符以外的 0+ 个字符,直到最后一个 , 并将字符串末尾除换行符以外的 1+ 个字符捕获到组“matchfromend”
    • 如果没有 SI在开头,匹配除换行符以外的 0+ 个字符,直到行尾。

另一种非正则表达式方法

检查字符串是否以SI开头如果是,用 展开并获得最后一项。如果不是,则使用整个字符串。

参见 IDEONE demo :

$str = "SI-#CL#¤1801 BARBER LANE#CL#MILPITAS CA 95035#CL#FONE 1-408-943-0600#CL#FAX 1-408-943-0484#CL#¤CANCEL BY 5 PM - RQST-NO FEATHER"; // => CANCEL BY 5 PM - RQST-NO FEATHER
//$str = "#CL#¤1801 BARBER LANE#CL#MILPITAS CA 95035#CL#FONE 1-408-943-0600#CL#FAX 1-408-943-0484#CL#¤CANCEL BY 5 PM - RQST-NO FEATHER";
$res = $str;
if (strrpos($str, "SI", -strlen($str)) !== false) { // starts with SI
$arr = explode("#¤", $str);
if (!empty($arr)){
$res = array_pop($arr);
}
}
echo $res;

关于regex - 从匹配条件结束开始匹配的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36615740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com