[英]Capitalize first letter in PHP using RegEx?
我在记事本文件中有如下数据:
A 1-6
A 1-7
B 1-8
B 1-9
B 1-10
c 1-11
C 1-12
D 1-13
F 1-14
F 1-15
f 1-16
我希望以上数据在记事本文件中进行如下更新:
<strong>A</strong> 1-6
A 1-7
<strong>B</strong> 1-8
B 1-9
B 1-10
<strong>c</strong> 1-11
C 1-12
<strong>D</strong> 1-13
<strong>F</strong> 1-14
F 1-15
f 1-16
这意味着添加<strong>
标记或任何其他带有首字母字母的标记。 文件中的数据按字母顺序(A到Z)排序。
我想使用RegEx技术在PHP中实现此目标,请帮忙!
谢谢。
我会做类似的事情:
$seen = array();
$file = array(
'A 1-6',
'A 1-7',
'B 1-8',
'B 1-9',
'B 1-10',
'c 1-11',
'C 1-12',
'D 1-13',
'F 1-14',
'F 1-15',
'f 1-16'
);
foreach($file as $line) {
$L = strtoupper(substr($line, 0, 1));
if (!isset($seen[$L])) {
$line = preg_replace('!^(.)!', "<strong>$1</strong>", $line);
$seen[$L] = 1;
}
echo $line,"\n";
}
输出:
<strong>A</strong> 1-6
A 1-7
<strong>B</strong> 1-8
B 1-9
B 1-10
<strong>c</strong> 1-11
C 1-12
<strong>D</strong> 1-13
<strong>F</strong> 1-14
F 1-15
f 1-16
您可以在命令行中使用awk
而不是grep
进行此操作:
example.file:
A 1-6
A 1-7
B 1-8
B 1-9
B 1-10
c 1-11
C 1-12
D 1-13
F 1-14
F 1-15
f 1-16
AWK(不区分大小写):
cat example.file | awk 'BEGIN {last=""} {if (tolower($1) != last) printf "<b>"$1"</b>"; else printf $1; print " "$2;last=tolower($1)}'
输出:
<b>A</b> 1-6
A 1-7
<b>B</b> 1-8
B 1-9
B 1-10
<b>c</b> 1-11
C 1-12
<b>D</b> 1-13
<b>F</b> 1-14
F 1-15
f 1-16
稍作调整,您也可以避免完全打印冗余的第一列,并汇总第一个事件下方的所有数据:
cat t | awk 'BEGIN {last=""} {if (tolower($1) != last) print "<b>"$1"</b>"; print $2;last=tolower($1)}'
输出:
<b>A</b>
1-6
1-7
<b>B</b>
1-8
1-9
1-10
<b>c</b>
1-11
1-12
<b>D</b>
1-13
<b>F</b>
1-14
1-15
1-16
如果这是真正的HTML,则可能还应该添加<BR>
标记。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.