我有一个以|
符号分隔的记录。我需要在同一记录中将一个字符串从一个地方替换为另一个地方:
我的输入如下:
BANG|ADAR|**285815**|MOTOR|GOOD||INDIA|2.4|SOFTWARE|285816_AKS|SAB_PART|**AKS_PN|285816**
我需要在285815
之后将AKS_PN
替换为字符串,在这种情况下,我需要将285815
替换为285816
。
使用(([^|]*\|){3})(.*)
我能够获取285815
,需要在同一正则表达式中AKS_PN
之后获取字符串的帮助。
我知道如何将285815
替换为285816
。我正在使用PHP。
答案 0 :(得分:0)
您需要使用捕获组。一般来说:
(everything_before)(interesting_part_1)(between)(interesting_part_in_the_end)
然后,按照您的意愿将它放在一起
(everything_before)(interesting_part_in_the_end)(between)
这会从最终字符串中留下(interesting_part_1)
^((?:[^|]*\|){2})([^|]*)\|(.*?AKS_PN)\|(.*)
需要替换为
$1$4|$3
查看example on regex101.com(仍不确定如何处理此处285815
)。
PHP
中的所有内容:
<?php
$string = "BANG|ADAR|285815|MOTOR|GOOD||INDIA|2.4|SOFTWARE|285816_AKS|SAB_PART|AKS_PN|285816";
$regex = '~^((?:[^|]*\|){2})([^|]*)\|(.*?AKS_PN)\|(.*)~';
$string = preg_replace($regex, "$1$4|$3", $string);
echo $string;
# BANG|ADAR|285816|MOTOR|GOOD||INDIA|2.4|SOFTWARE|285816_AKS|SAB_PART|AKS_PN
?>
<小时/>
你甚至不需要这里的正则表达式(太复杂了),之后只需拆分,切换和连接:
<?php
$string = "BANG|ADAR|285815|MOTOR|GOOD||INDIA|2.4|SOFTWARE|285816_AKS|SAB_PART|AKS_PN|285816";
$parts = explode("|", $string);
$parts[2] = $parts[count($parts) - 1];
$string = implode("|", $parts);
echo $string;
?>