在 Perl 中使用正则表达式将降价斜体替换为 html
Substitute the markdown italic to html using regex in Perl
要将降价斜体文本$script
转换为html,我这样写:
my $script = "*so what*";
my $res =~ s/\*(.)\*//g;
print "<em></em>\n";
预期结果是:
<em>so what</em>
但它给出:
<em></em>
如何让它达到预期的效果?
问题:
- 你打印了错误的变量。
- 你在中途切换了变量名。
.
不会匹配超过一个字符。
- 你总是添加一个 EM 元素,即使没有找到星星。
- 你总是添加一个 EM 元素,即使找到多对恒星也是如此。
- 您在整个输出周围添加 EM 元素,而不仅仅是星星中的部分。
修复:
$script =~ s{\*([^*]+)\*}{<em></em>}g;
print "$script\n";
或
my $res = $script =~ s{\*([^*]+)\*}{<em></em>}gr;
print "$res\n";
但事实并非如此。即使解决了上述所有问题,您的解析器仍然存在许多其他错误。例如,它错误地将斜体应用于以下所有内容:
**Important**
正确:重要
您的代码:*重要*
4 * 5 * 6 = 120
正确:4 * 5 * 6 = 120
您的代码:4 5 6 = 120
4 * 6 = 20 is *wrong*
正确:4 * 6 = 20 错误
您的代码:4 6 = 20 错误*
`foo *bar* baz`
正确:foo *bar* baz
您的代码:`foo bar baz`
\*I like stars\*
正确:*我喜欢星星*
您的代码:\我喜欢星星\
要将降价斜体文本$script
转换为html,我这样写:
my $script = "*so what*";
my $res =~ s/\*(.)\*//g;
print "<em></em>\n";
预期结果是:
<em>so what</em>
但它给出:
<em></em>
如何让它达到预期的效果?
问题:
- 你打印了错误的变量。
- 你在中途切换了变量名。
.
不会匹配超过一个字符。- 你总是添加一个 EM 元素,即使没有找到星星。
- 你总是添加一个 EM 元素,即使找到多对恒星也是如此。
- 您在整个输出周围添加 EM 元素,而不仅仅是星星中的部分。
修复:
$script =~ s{\*([^*]+)\*}{<em></em>}g;
print "$script\n";
或
my $res = $script =~ s{\*([^*]+)\*}{<em></em>}gr;
print "$res\n";
但事实并非如此。即使解决了上述所有问题,您的解析器仍然存在许多其他错误。例如,它错误地将斜体应用于以下所有内容:
**Important**
正确:重要
您的代码:*重要*4 * 5 * 6 = 120
正确:4 * 5 * 6 = 120
您的代码:4 5 6 = 1204 * 6 = 20 is *wrong*
正确:4 * 6 = 20 错误
您的代码:4 6 = 20 错误*`foo *bar* baz`
正确:foo *bar* baz
您的代码:`foo bar baz`\*I like stars\*
正确:*我喜欢星星*
您的代码:\我喜欢星星\