簡書太扯了, 不管是什么空格都替換掉了。
開門見山, 廢話不多說。如果非標題行在標題行上面, 那么這倆行之間會有一段空白, 但是你肯定遇到過:
這個標題會和下面的非標題行貼在一塊
即使我在這一行換行也于事無補, 它們被簡書吃掉啦。這不能忍! 看起來很丑有沒有?下面我們就來解決這個問題, 手動在這一行的上面加上一個全角的空格, 就 okay 了。
問題似乎已經(jīng)解決了, 但是我不能夠。必須寫個程序來幫我們解決這煩人的問題。方法就是在標題行后面添加一個換行符和一個全角空格(測試后行不通, 還是被吃, 換成 <br>
吧)。
use v6;
for dir(test => /\. md|markdown $/) -> $file {
my $out = open $file ~ '.txt', :w;
my @lines = $file.lines;
for @lines -> $line is rw {
if $line ~~ /^\s*$/ {
$out.say($line);
next;
}
$line ~~ s/^ ('#' ** 1..7 .*?) $/$0\n <br>/ unless
$line ~~ /^\s*'```'\s*(\w+)?$/ fff $line ~~ /^\s*'```'\s*$/;
$out.say($line);
}
$out.close;
}
其中有段代碼比較有意思, 就是:
$line ~~ /^\s*'```'\s*(\w+)?$/ fff $line ~~ /^\s*'```'\s*$/;
這是用來匹配代碼片段的。 它匹配 ``` 標識之間的東西。這能夠用于提取代碼片段, 假如我有一個叫做 input.txt 的文本文件:
# 提取代碼片段
## Flip 和 Flop
這倆單詞是什么鬼? 反轉(zhuǎn)操作符? 看起來很牛的樣子, 我`方`了, 我覺得它像開關(guān)。
## 片段1
'''perl6
say 'hello';
### 我是 Perl 6 代碼
'''
ff 還有 ^ff、 ff^ 和 ^ff^ 三種變體。
## 片段2
''' perl
# 我是 Perl 5 代碼
say 'hello' ~ 'world';
'''
# 片段3
'''
fff 用于對付某些特殊情況。
### 這是注釋
我只是在測試 ff 和 fff 的不同。顯然, fff 更智能點。
'''
因為簡書對嵌套的 * 這種結(jié)構(gòu)處理不好, 所以我使用單引號 *'* 來代替 *`*。我需要提取每對 **
* 之間的內(nèi)容, 那么:
use v6;
my @lines = "input.txt".IO.lines;
for @lines -> $line {
say $line if $line ~~ /^\s*'```'\s*(\w+)?$/ ff $line ~~ /^\s*'```'\s*$/;
}
但是對于片段3, 因為開始標識符和結(jié)束標識符都是 ```, ff
提取不到, 這時需要用到 fff
了:
say $line if $line ~~ /^\s*'```'\s*(\w+)?$/ fff $line ~~ /^\s*'```'\s*$/;
如果你連開始和結(jié)尾的 ``` 標識符也不想要, 那么使用 ^fff^
。