preg_match优化 - 正则表达式太慢了

(。[^
] ?)\ [code](。?)\ [ (。?[^
]的*)\ /代码](* SKIP)(* F)|([^
]的*?)\ [PHP] \ [\ / PHP的]((*?)。 [^
] ?)(跳过)(* F)| some_rules_here </ code> </ p>

上面的模式使得函数运行得太慢。</ p>
\ n

有了它:
http://regex101.com/r/qP4tT5/1
Page加载时间超过3秒。

Regex调试器说执行正则表达式需要总共5153步。</ p>

没有它:
http://regex101.com/r/fG4tW0/1
Page仅在0.3秒内加载
Regex调试器说它花了 执行正则表达式只需4个步骤。</ p>

为什么我必须使用它:
因为表情符号的快捷方式位于 [code] </ code>或中 [php] </ code>标签,它不应该是HTML。</ p>

是否有另一种方法可以更快地完成同样的事情?</ p>
</ div>

展开原文

原文

(.[^ ]*?)\[code](.*?)\[\/code](.[^ ]*?)(*SKIP)(*F)|(.[^ ]*?)\[php](.*?)\[\/php](.[^ ]*?)(*SKIP)(*F)|some_rules_here

The pattern above makes the function work too slow.

With it: http://regex101.com/r/qP4tT5/1 Page gets loaded in more than 3 seconds. Regex debugger says it took 5153 steps in total to execute the regex.

Without it: http://regex101.com/r/fG4tW0/1 Page gets loaded in only 0,3 seconds Regex debugger says it took only 4 steps to execute the regex.

Why do I have to use it: Because if the emoticon's shortcut is inside a [code] or [php] tag, it shouldn't be HTMLed.

Is there an alternative method which does the same thing faster?

dongshan4549
dongshan4549 然后你不能使用正则表达式来构建一个伪任务,以实现任意输入。你需要一个合适的BBCode解析器。
大约 6 年之前 回复
dongpu2727
dongpu2727
大约 6 年之前 回复
donglan9651
donglan9651 [code]:([code]:([/code]:([/code]是否应该跳过所有这些表情符号?
大约 6 年之前 回复
dongxi1879
dongxi1879 我的问题很清楚。我有一个由我自己开发的BBCode和Emoticon解析器(使用preg_replace和preg_match函数制作)。它完美无缺地运行。唯一的问题是它的速度。如果BBCode或表情符号位于[code]或[php]标记内,则解析器不会替换它并将其跳过它应该执行的操作。但就像我之前说过的那样,它太慢了。
大约 6 年之前 回复
dongtangdao7232
dongtangdao7232 [code]和[php]?表情?你是从论坛帖子解析BBCode吗?BBCode是一种不规则的语言(如HTML),我们都知道当您尝试使用正则表达式解析HTML时会发生什么。我认为你需要一个BBCode解析器(可能非常快)。
大约 6 年之前 回复
duangouhui0446
duangouhui0446 你应该指明你想做的“事情”究竟是什么。带样本输入和输出。
大约 6 年之前 回复

1个回答



您可以稍微简化这个正则表达式。</ p>

 〜\ [(code  | php)] [^ [] * \ [/ \ 1](*跳过)(* F)|:\(~i 
</ code> </ pre>

</ p>

现场演示 </ p>
</ div>

展开原文

原文

You can simplify this regular expression a bit.

~\[(code|php)][^[]*\[/\1](*SKIP)(*F)|:\(~i

enter image description here

Live Demo

doushan5245
doushan5245 别客气。
大约 6 年之前 回复
doukui4786
doukui4786 对不起,我的错。 我没有看到你使用〜而不是/。 我的解析器现在工作得更快。 该页面仅在0.1秒内加载。 这是0.3秒之前。 再次感谢你!
大约 6 年之前 回复
doudiyu1639
doudiyu1639 不,它不处理嵌套。 OP原始正则表达式也没有。
大约 6 年之前 回复
dongman2721
dongman2721 此正则表达式不处理嵌套:regex101.com/r/qP4tT5/7
大约 6 年之前 回复
duandu8707
duandu8707 然后使用$ 1代替。
大约 6 年之前 回复
draj30958
draj30958 这正是我需要的! 谢谢。 但它在php中效果不佳。 我认为[/ \ 1]部分会导致问题。 \字符转义1并给出错误。 当我像[/ \\ 1]那样逃避斜线时,它会说“未知的修饰符”。 我怎样才能解决这个问题?
大约 6 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐