Thursday, 3. September 2009, 01:03:51
Regex, EmEditor
从事代码别想工作时间长了,用正则表达式查找替换文本也就成为家常便饭。
编辑文本,如果不会用正则表达式,效率要打折扣,这是我的一点体会。
记录一下最近常用的表达式:
-------------------------------
js多余逗号
,[\s\r\n]*\}
,[\s\r\n]*\]
-------------------------------
行尾空格
([^\s])\s+$
-------------------------------
一个或多个汉字
[\x{4e00}-\x{9fa5}]+
-------------------------------
php 变量名替换: $var_name -> $varName
替换前: (\$\w+)_(\w)(\w*)
替换后: \1\U\2\L\3
-------------------------------
从HTML文本抽取 name="..." 中的name属性
替换前: .*\sname="([^"]+)".*
替换后: \1
-------------------------------
其他常用的暂时想不起来,以后补充。
注:
以上表达式,主要在 EmEditor 下使用。
EmEditor 下正则替换很简单,替换字符串()中的内容,在被替换的字符串里,按顺序是 \1 \2 \3 ...
Thursday, 5. February 2009, 11:31:58
Regex, PHP
这东西太常用,有时候又记不住,每次上Google查询,太费事,所以贴一个在这儿。
.(句点) 匹配所有单个字符
^(脱字符号) 匹配出现在行或字符串开头的空字符串
$(美元符号) 匹配出现在行尾的空字符串
A 匹配大写字母 A
a 匹配小写字母 a
\d 匹配所有一位数字
\D 匹配所有单个非数字字符
\w 匹配所有单个字母或数字字符;同义词是 [:alnum:]
[A-E] 匹配所有大写的 A、B、C、D 或 E
[^A-E] 匹配除大写 A、B、C、D 或 E 之外的任何字符
X? 匹配出现零次或一次的大写字母 X
X* 匹配零个或多个大写字母 X
X+ 匹配一个或多个大写字母 X
X{n} 精确匹配 n 个大写字母 X
X{n,m} 至少匹配 n 个且不多于 m 个大写字母 X;如果忽略 m,则表达式将尝试匹配至少 n 个 X
(abc|def)+ 匹配一连串的(最少一个)abc 和 def;abc 和 def 将匹配
Friday, 14. March 2008, 11:10:16
Regex, 正则表达式, 日文
# 半角スペース
$spc = '\x20';
# 全角スペース
$eSpc = '(?:\xA1\xA1)'; # EUC-JP
$sSpc = '(?:\x81\x40)'; # SJIS
# 全角数字 [0-9]
$eLng = '(?:\xA3[\xB0-\xB9])'; # EUC-JP
$sLng = '(?:\x82[\x4F-\x58])'; # SJIS
# 全角小英字 [a-z]
$estr = '(?:\xA3[\xE1-\xFA])'; # EUC-JP
$sstr = '(?:\x82[\x81-\x9A])'; # SJIS
# 全角大英字 [A-Z]
$eStr = '(?:\xA3[\xC1-\xDA])'; # EUC-JP
$sStr = '(?:\x82[\x60-\x79])'; # SJIS
# 全角ひらがな [ぁ-ん]
$eHira = '(?:\xA4[\xA1-\xF3])'; # EUC-JP
$sHira = '(?:\x82[\x9F-\xF1])'; # SJIS
# 全角カタカナ [ァ-ヶ]
$eKana = '(?:\xA5[\xA1-\xF6])'; # EUC-JP
$sKana = '(?:\x83[\x40-\x96])'; # SJIS
# 半角カタカナ [ヲ-゜]
$ekana = '(?:\x8E[\xA6-\xDF])'; # EUC-JP
$skana = '[\xA6-\xDF]'; # SJIS
# EUC-JP文字
$euc1 = '[\x00-\x7F]'; # 1byte EUC-JP文字
$euc2 = '(?:[\x8E\xA1-\xFE][\xA1-\xFE])'; # 2byte EUC-JP文字
$euc3 = '(?:\x8F[\xA1-\xFE][\xA1-\xFE])'; # 3byte EUC-JP文字
$euc = "(?:$euc1|$euc2|$euc3)"; # EUC-JP文字
Thursday, 31. January 2008, 10:36:35
Regex, CSV, 正则表达式, PHP
在网上找到一个将 CSV 数据行分解为数组的PHP函数,如下:
function splitCsvLine($str) {
$expr = "/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/";
$results = preg_split($expr, trim($str));
return preg_replace("/^\"(.*)\"$/", "$1", $results);
}
由于利用了正则表达式,函数很简洁,功能却是不弱,带引号和不带引号的 CSV 数据,都可以正确分解。
Friday, 18. January 2008, 09:40:09
Regex, 正则表达式, JavaScript
用JavaScript实现的例子如下:
var sTxt = '正则表达式【①】查找【②】替换【③】';
sTxt = sTxt.replace(/【([^【】]|【?R】)*】/g, ' 注$& ');
alert(sTxt);
結果:
正则表达式 注【①】 查找 注【②】 替换 注【③】
Tuesday, 2. October 2007, 05:14:43
Regex, 正则表达式, EmEditor
命题:
在以下数据中,用正则表达式查找不包含"ab"和“bc”,但包含“cd”的行。
abcdefg
acbdefg
ab
bc
cd
cdxxabxxbc
abcd
cdab
axbxcdxxx
正确结果应该是:
abcdefg
acbdefg
ab
bc
cd
cdxxabxxbc
abcd
cdab
axbxcdxxx
解答一:
^(?!.*ab)(?!.*bc)(?=.*cd).*$解答二:
^(?!(?=.*(ab|bc)))(?=.*cd).*$以上解答经 EmEditor 验证,无误。
本文摘自《
正規表現パズル》。
以上正则表达式的解释请看
原文。
Tuesday, 19. June 2007, 04:39:11
Regex, Editor, 正则表达式
替换前: ([A-Za-z]+)=([#A-Za-z0-9_%]+)
替换后: \1="\2"
这是用EmEditor一次替换的方法,其他支持正则表达式的编辑器应该是大同小异。
目前发现的缺点:
content="text/html; charset=utf-8"
会被替换成
content="text/html; charset="utf"-8"
还有JavaScript的变量赋值得地方也需注意。