乙個正則切割問題

2021-04-13 09:13:35 字數 1301 閱讀 2998

今天看到csdn乙個哥們說怎麼把漢字兩個兩個的給以空格分開。

就是比如 」我們的祖國是花園啊「  分成 」 我們  的祖  國是  花園  啊「 這樣的形式。當時沒有怎麼想。回家來沒事,索性研究了一下。

前提:這個是在cu上抄的匹配中文字元的**:

$d = "我的太陽";

@pattern = ('[/u4e00-/u9fff]','[^/u4e00-/u9fff]','[chr(0xa1)-chr(0xff)]','[^chr(0xa1)-chr(0xff)]','[/x80-/xff][/x80-/xff]','[^/x80-/xff][^/x80-/xff]','[/x80-/xff]','[^/x80-/xff]','[/u4e00-/u9fa5/uf900-/ufa2d]','[^/u4e00-/u9fa5/uf900-/ufa2d]','[/u4e00-/u9fa5]','[^/u4e00-/u9fa5]','[/x00-/xff]','[^/x00-/xff]');

foreach $p (@pattern)

故而 perl的解決如下:

$d = "我的太陽我的太陽你";

$d = reverse $d;

$d =~ s/(?<=([/x80-/xff][/x80-/xff]))(?=(([/x80-/xff][/x80-/xff]))+$)/-/g;

$d = reverse $d;

print  "$d";

這個辦法有些笨,但是基本完成了任務。另外上perlmonk上請教了高人,記錄了一下其他的解決方案:

$d =~ s/(/d/d)(?=/d)/$1-/g;

或者:1 while $d =~ s/(?<=/d/d)(?=/d)/-/;

說到上面 1 while $d =~ s/(?<=/d/d)(?=/d)/-/; 這個,我就又想到了 $d =~ s/(?<=/d/d)(?=/d)/-/g; 同時比較了他們的區別:

1:$d = "123456789";

while ($d =~ s/(?<=/d/d)(?=/d)/-/)

2:$d = "123456789";

$d =~ s/(?<=/d/d)(?=/d)(?)/-/g;

print $d;

還不是很清楚,留在以後研究。另外,php的解決相應的也比較簡單:

$string = "我的太陽我的太陽你";

echo  preg_replace("/([/x80-/xff][/x80-/xff][/x80-/xff][/x80-/xff])(?=[/x80-/xff][/x80-/xff])/is", "//1 ", $string);

sed 正則的乙個小問題

有一段類似以下的文字 aabbccc test 3307 112323553 66778tp aooppx69tp ooppsg aabbccc test 3307 1127233 6674tp booppx67tp oofs3g aabbccc test 3307 1125233 6277558t...

乙個字句切割 strtok s

突然想到的一件事這是,之前是用stringstream來對那些東西切割的,只是空格分隔的,之後發現不能切割其他符號的字句 也可能是我水平有限 然後我發現strtok s可以自定義分割符,於是我記錄一下這個操作。include include include using namespace std c...

乙個wooyun正則

測試文字 我要反饋 回到頂部 登入 註冊 當前位置 wooyun 最新公開 提交日期 漏洞標題 作者 2016 04 11 印象筆記某處設計缺陷 可暴力破解 大規模撞庫 路人甲2016 04 10 中華英才網一處未授權訪問getshell可內網 js2012 2016 04 07 tom某伺服器原始...