正则表达式+富文本,高亮显示文字中的数值部分-新闻详情

正则表达式+富文本,高亮显示文字中的数值部分


发布时间:2016-12-30责任编辑:朱明 浏览:2745


在制作游戏界面的过程中,经常会遇到文本的显示,如人物技能的描述,武器特效的描述等内容。在这些文字中,通常会涉及一些具体的数值,如攻击力、技能冷却时间,它们可能会随着角色的升级,武器的强化而发生改变。因此,为了让玩家能够一目了然的看到这些最能体现价值的核心数值,我们需要在一段文字中把它们进行高亮显示。

     为了实现上述目的,我们需要使用正则表达式 + 富文本的方式,来达成效果。先来看文本的高亮显示,也就是说我们要改变文本的颜色。这里,我们通过富文本的方式,来改变文本内容到任意颜色。添加color标签:

 

<color=green>文本内容</color>

 

这样一来,在界面上显示的文本内容就会以完全不透明的绿色显示。注意,结尾标签不包括参数数值,参数数值可以由双引号括起来,不过这不是必须的。有了改变颜色的功能,接下来需要从文本中筛选出需要变色的数值文本部分。

       从一段文本中筛选出数字部分,这种字符串匹配的工作交给正则表达式来处理再合适不过了。先简单介绍一下什么是正则表达式。正则表达式又称为规则表达式,是计算机科学中的一个概念。通常用来检索、替换符合某个模式(规则)的文本。C#的.Net框架支持匹配的正则表达式引擎。在C#中使用正则表达式,主要是通过Regex类实现的,需要添加命名空间的引用:using System.Text.RegularExpressions;       

使用正则表达式,需要了解正则表达式中各个字符所代表的含义。比如根据我们的需要,匹配文本中的数字字符串,则代码如下:

 

       Regex reg = new Regex(@"d+");

 

       其中,d表示匹配任意的数字字符;+表示匹配前面的子表达式一次或多次。d+组合起来就是匹配数字字符串。然后,我们还要筛选出文本中的非数字部分,以便与数字部分进行分段的拼接。

 

       Regex reg = new Regex(@"D+");

 

       其中,D是d的反义元字符,匹配的是任意非数字字符,等价于[^0-9]。如下所示,是正则表达式中所使用的符号模式:

 

字  符

描  述

转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反过来

^

匹配输入字符串的开始位置

$

匹配输入字符串的结束位置

*

匹配前面的零次或多次的子表达式

+

匹配前面的一次或多次的子表达式

?

匹配前面的零次或一次的子表达式

{n}

n是一个非负整数,匹配前面的n次子表达式

{n,}

n是一个非负整数,至少匹配前面的n次子表达式

{n,m}

m和n均为非负整数,其中n<=m,最少匹配n次且最多匹配m次

?

当该字符紧跟在其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式尽可能少的匹配所搜索的字符串

.

匹配除“ ”之外的任何单个字符

(pattern)

匹配pattern并获取这一匹配

(?:pattern)

匹配pattern但不获取匹配结果

(?=pattern)

正向预查,在任何匹配pattern的字符串开始处匹配查找字符串

(?!pattern)

负向预查,在任何不匹配pattern的字符串开始处匹配查找字符串

x|y

匹配x或y。例如,‘z|food’能匹配“z”或“food”。‘(z|f)ood’则匹配“zood”或“food”

[xyz]

字符集合。匹配所包含的任意一个字符。例如,‘[abc]’可以匹配“plain”中的‘a’

[^xyz]

负值字符集合。匹配未包含的任意字符。例如,‘[^abc]’可以匹配“plain”中的‘p’

[a-z]

匹配指定范围内的任意字符。例如,‘[a-z]’可以匹配'a'到'z'范围内的任意小写字母字符

[^a-z]

匹配不在指定范围内的任意字符。例如,‘[^a-z]’可以匹配不在‘a’~‘z’'内的任意字符



匹配一个单词边界,指单词和空格间的位置

B

匹配非单词边界

d

匹配一个数字字符,等价于[0-9]

D

匹配一个非数字字符,等价于[^0-9]

f

匹配一个换页符

匹配一个换行符

匹配一个回车符

s

匹配任何空白字符,包括空格、制表符、换页符等

 

S

匹配任何非空白字符

匹配一个制表符

v

匹配一个垂直制表符。等价于x0b和cK

w

匹配包括下划线的任何单词字符。等价于‘'[A-Za-z0-9_]’

W

匹配任何非单词字符。等价于‘[^A-Za-z0-9_]’

 

 

筛选出数字字符串之后,我们只需要在它的前后添加上带有颜色参数的color标签,"<color=#00ff00>"+number.ToString()+"<color>",然后交给UI去显示就大功告成了。最终的效果如图:

 

正则1.png

 

战国工作室  供稿