Php 如何在char列表中包含单引号和双引号?

Php 如何在char列表中包含单引号和双引号?,php,regex,regex-negation,regex-lookarounds,regex-greedy,Php,Regex,Regex Negation,Regex Lookarounds,Regex Greedy,我这样写正则表达式 ^[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]+$ 我都试过了,但它不起作用,因为引用被正则表达式中的引用打断了 我不想像你一样盯着他们 $regex="{partA}".'"'."{partB}"; 我认为这太难阅读,也不容易维护 如何解决这个问题?两个正则表达式在PHP中都会产生语法错误,因为正则表达式本身中有引号 如果不想将正则表达式连接成两个不同的部分,最好的方法是用反斜杠转义引号: $regex = "^[-!$%^&

我这样写正则表达式

^[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]+$
我都试过了,但它不起作用,因为引用被正则表达式中的引用打断了

我不想像你一样盯着他们

$regex="{partA}".'"'."{partB}";
我认为这太难阅读,也不容易维护


如何解决这个问题?

两个正则表达式在PHP中都会产生语法错误,因为正则表达式本身中有引号

如果不想将正则表达式连接成两个不同的部分,最好的方法是用反斜杠转义引号:

$regex = "^[-!$%^&*()_+|~=`{}\[\]:\";'<>?,.\/]+$";
$regex = '^[-!$%^&*()_+|~=`{}\[\]:";\'<>?,.\/]+$';

除此之外,使用单引号也会稍微快一些。

对于您的第一个表达式,这里我们可以使用\x27和\x22代替引号,并且我们可能希望删除开始字符和结束字符,可能类似于:

[-!$%^&*()_+|~=`{}\[\]:\x22;\x27<>?,.\/]+
([\s\S].*?)([a-z0-9]+)?

试验
const regex=/([\s\s].*)([a-z0-9]*)/gmi;
const str=`{partA}.''.''.{partB}{partC12}.''.''.{partD109}{partA}.'''.''.''.{partB}{partC12}.'''.''.{partD109}'.';
常量subst=`2`;
//被替换的值将包含在结果变量中
const result=str.replace(regex,subst);

log('替换结果:',结果)也许您的正则表达式可以像
^(?。*[\\@])[[:punct:]+$
一样简单
[:punct://code>是其中之一。
演示和解释在

[-!$%^&*()_+|~=`{}\[\]:\x22;\x27<>?,.\/]+
([\s\S].*?)([a-z0-9]+)?
$re = '/([\s\S].*?)([a-z0-9]*)/mi';
$str = '{partA}".\'"\'."{partB}{partC12}".\'"\'."{partD109}{partA}".\'"\'."{partB}{partC12}".\'"\'."{partD109}';
$subst = '$2 ';

$result = preg_replace($re, $subst, $str);

echo $result;