- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在下面的示例中,PHP 比 Rust 快 5.5 倍。
我做错了什么吗?
对我来说,Rust 中的正则表达式引擎似乎比 PHP 中的要慢。
PHP代码:
$html = file_get_contents('/path_to/test.html');
global $c_id;
$c_id = 0;
echo 'len with comments: ', strlen($html), "\n";
$time_start = microtime(true);
$html = preg_replace_callback('/<!--(.*?)-->/s', function($matches) {
global $c_id;
$c_id++;
return str_replace($matches[1], $c_id, $matches[0]);
}, $html);
echo (microtime(true) - $time_start), " seconds for removing comments.\n";
echo 'len without comments: ', strlen($html), "\n";
防 rust 代码:
use regex::Regex;
use std::io::prelude::*;
use std::fs::File;
fn main() {
let mut file = File::open("/path_to/test.html").expect("Unable to open the file");
let mut html = String::new();
file.read_to_string(&mut html).expect("Unable to read the file");
let mut c_id: usize = 0;
println!("len with comments: {}", html.len());
let start = PreciseTime::now();
let re = Regex::new(r"(?s)<!--(.*?)-->").unwrap();
html = re.replace_all(&html, |captures: ®ex::Captures| {
c_id += 1;
captures[0].replace(&captures[1], &c_id.to_string())
}).to_string();
println!("{} seconds for removing comments.", start.to(PreciseTime::now()));
println!("len without comments: {}", html.len());
}
Rust 依赖项:
regex = "1"
time = "*"
结果
PHP:
len with comments: 76968
0.00019717216491699 seconds for removing comments.
len without comments: 76622
使用rust :
len with comments: 76968
PT0.001093365S seconds for removing comments.
len without comments: 76622
谢谢!
最佳答案
答案是在 rust 中使用 pcre2 crate 而不是 regex crate。
关于php - Rust regex replace_all 比 PHP regex preg_replace_callback 慢,如何优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58580753/
我对 boost::replace_all 有疑问。我的字符串看起来像: ""Date"":1481200838,""Message"":"" 我希望它看起来像: "Date":1481200838,
Regex::replace_all 有签名fn (text: &str) -> Cow .对此的两次调用将如何编写,f(g(x)) ,给出相同的签名? 这是我正在尝试编写的一些代码。这将两个调用分成
stringr包有帮助str_replace()和 str_replace_all()职能。例如 mystring 1) sprintf("^((.*?\\bfish\\b.*?){%d})\\bf
我想要一种有效的方法来执行搜索和替换字符串(实际上它是一个着色器字符串),所以我做了一些研究并想出了 boost::replace_all。我的函数传递了一个字符串和一个 vector 或对。每对是一
我正在尝试查找字符串的所有实例并将其替换为缩短版本,如果找到,我想保留对捕获的引用。 我写了这段代码: extern crate regex; use regex::{Regex, Captures}
在下面的示例中,PHP 比 Rust 快 5.5 倍。 我做错了什么吗? 对我来说,Rust 中的正则表达式引擎似乎比 PHP 中的要慢。 PHP代码: $html = file_get_conten
我是一名优秀的程序员,十分优秀!