我尝试使用以下示例删除与特定模式不匹配的字符:
模式恰好匹配4个字母[a-zA-Z]{4}
,后跟空格\s{1,}
,然后是4个字母,以字母开头,最后3个数字[a-zA-Z]{1}[0-9]{3}
如果我提供ABEH A501; BIOL L340; BIOL Z620; Q799; ABEH A501
,则匹配除Q799
以外的所有内容,现在,我需要从字符串中删除/替换Q799
。
我尝试应用Negated Character Classes,但仍未获得所需的结果。
$mystring = "ABEH A501; BIOL L340; BIOL Z620; Q799; ABEH A501";
$string = preg_replace("/[^a-zA-Z]{4}\s{1,}[a-zA-Z]{1}[0-9]{3}/","",$mystring);
echo $string; //ABEH A501; BIOL L340; BIOL Z; ABEH A501
所需的结果应为ABEH A501; BIOL L340; BIOL Z620; ABEH A501
Q799
已删除,因此也是另一个匹配字符串的一部分,不确定这是由于错误的regEx还是错误的应用否定字符类。
答案 0 :(得分:3)
在PHP中,您可以定义一个已知的匹配正则表达式,并使用PCRE动词(*SKIP)(*F)
来替换这些匹配项:
$mystring = "ABEH A501; BIOL L340; BIOL Z620; Q799; ABEH A501";
echo preg_replace('/[a-zA-Z]{4}\s+[a-zA-Z]\d{3}(*SKIP)(*F)|\w+\W*/', '', $mystring);
<强>输出:强>
ABEH A501; BIOL L340; BIOL Z620; ABEH A501
答案 1 :(得分:1)
这是一个与问题不同的方法,但嘿,它有效
<?php
$mystring = "ABEH A501; BIOL L340; BIOL Z620; Q799; ABEH A501";
preg_match_all("/[a-zA-Z]{4}\s{1,}[a-zA-Z]{1}[0-9]{3};?\s+?/",$mystring, $matches);
$result = "";
foreach($matches[0] as $match) {
$result = $result.$match;
}
echo $result; //ABEH A501; BIOL L340; BIOL Z620;
?>