Php 正则表达式匹配模式,除非转义
我尝试了几种风格的Php 正则表达式匹配模式,除非转义,php,regex,Php,Regex,我尝试了几种风格的PHPmarkdown转换器,用于将*XYZ*转换为标记,并将**ABC**转换为标记。他们对我需要的东西做得有点太多了,比如添加段落标签等等 注意,我只使用了两个标记 我写了一个RegExp,它可以正常工作,但我需要转义保留字符,以防用户需要这些字符中的文字字符,就像我在文章中所做的那样 这就是我到目前为止所做的: preg_replace("/(?<!\\\)\*\*([^\*\*]*)(?<!\\\)\*\*/", "<strong>$1</
PHP
markdown转换器,用于将*XYZ*转换为标记,并将**ABC**转换为标记。他们对我需要的东西做得有点太多了,比如添加段落标签等等
注意,我只使用了两个标记
我写了一个RegExp,它可以正常工作,但我需要转义保留字符,以防用户需要这些字符中的文字字符,就像我在文章中所做的那样
这就是我到目前为止所做的:
preg_replace("/(?<!\\\)\*\*([^\*\*]*)(?<!\\\)\*\*/", "<strong>$1</strong>", $line);
但它输出
My name is <em></em>Earle<em></em>*
我叫厄尔*
我的正则表达式出了什么问题,您能解释一下修复程序是什么吗,以便将来的人们知道您需要匹配转义实体,您不能使用lookarounds
\*\*([^*\\]*(?:\\.[^\\*]*)*)\*\*
看
说明:
-2个前导星号\*\*
-第1组匹配([^*\\]*(?:\\.^\\*]*)*)
-除[^*\]*
和*
之外的零个或多个字符\
-零个或多个。。。(?:\\.[^\\*]*)*
-任何转义序列\\.
-除[^\\*]*
和*
之外的零个或多个字符\
-2个尾随的星号\*\*
此外,您可以使用
/s
修饰符甚至支持转义换行。不可能将<1
更改为Earle
。您没有为我们显示一些代码。
\*\*([^*\\]*(?:\\.[^\\*]*)*)\*\*