if(preg_match("/(.*(<code>).*(<\/code>).*)*/", $string))
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多个小时,但我无法让它发挥作用.我希望如果用户格式化文本正确,如:
(any_string*<code>any_string*</code>any_string*)*
Run Code Online (Sandbox Code Playgroud)
只有这样我才能用*表示文本格式为空字符串或多次.我的表情有什么问题?
编辑:我想要匹配lalala text <code>dlalala lala code</code> lalalal.如果它lala <code> lalala或者lalal </code> <code> lalala <code>alala我们不想匹配它.
这适用于2个给定的测试用例:
$arr = array('lalala text <code>dlalala lala code</code> lalalal.',
'lala <code> lalala or lalal </code> <code> lalala <code>alala');
foreach ($arr as $str) {
echo "$str\n";
if (preg_match('#^(?<!<code>).*<code>.*?</code>(?!.*<code>)#', $str)) {
echo "===> Match\n";
} else {
echo "===> Not match\n";
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
lalala text <code>dlalala lala code</code> lalalal.
===> Match
lala <code> lalala or lalal </code> <code> lalala <code>alala
===> Not match
Run Code Online (Sandbox Code Playgroud)
关于正则表达式的一些解释:
# : regex delimiter
^ : begining of string
(?<! : start negative lookbehind
<code> : literally <code>
) : end of lookbehind
.* : any char any number of time
<code> : literally <code>
.*? : any char any number of time not greedy
</code> : literally </code>
(?! : start negative lookahead
.* : any char any number of time
<code> : literally <code>
) : end of lookahead
# : regex delimiter
Run Code Online (Sandbox Code Playgroud)
您可以在此处找到有关环视的有用信息