iOS正则表达式的使用案例-富文本

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC"; color: #1e9421 }
span.s1 { }
span.s2 { font: 18.0px Menlo }

富文本(正则表达式)

一.新建工程导入图片

二 实现方式一(缺点是只能解决一个图片的替换)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #3e1e81 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #1e9421 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #c81b13 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #000000; min-height: 21.0px }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC"; color: #1e9421 }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #6122ae }
p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #3c828b }
p.p8 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #000000 }
span.s1 { color: #539aa4 }
span.s2 { color: #000000 }
span.s3 { color: #703daa }
span.s4 { color: #6122ae }
span.s5 { }
span.s6 { color: #0435ff }
span.s7 { font: 18.0px "PingFang SC" }
span.s8 { font: 18.0px Menlo; color: #000000 }
span.s9 { font: 18.0px Menlo }
span.s10 { color: #3e1e81 }
span.s11 { color: #c81b13 }
span.s12 { color: #c42275 }

_myLabel.font = [UIFont systemFontOfSize:15];

//@"家里真没人 "

//正则表达式 [] 是特殊字符

NSString *str = @"女神: s012 家里真没人 s010 202 s018 ";

//特殊文本 加表情

//    NSAttributedString *

//1.先创建一个值存放文本的字符串并且填充字符串数据

NSAttributedString *attributedString = [[NSAttributedString alloc]initWithString:str];

//2.创建一个带图片的附件对象

LHQTextAttachment *attachment = [[LHQTextAttachment alloc]init];

//给附件对象增加一个image

attachment.image = [UIImage imageNamed:@"s014.png"];

//3.在创建一个可以存放待图片文本的

NSAttributedString *strImage = [NSAttributedString attributedStringWithAttachment:attachment];

//4.可变属性字符串拼接普通文本和附件文本

NSMutableAttributedString *mAttributedString = [[NSMutableAttributedString alloc]initWithAttributedString:attributedString];

//    [mAttributedString appendAttributedString:attributedString];

//扫描位置 s012//定一个规则

NSString *pattern = @"[s][0-9]{3}";

NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:NULL];

NSTextCheckingResult *result =  [regular firstMatchInString:str options:1 range:NSMakeRange(0, str.length)];

//    result.range =

[mAttributedString replaceCharactersInRange:result.range withAttributedString:strImage];

_myLabel.attributedText = mAttributedString;

实现方式二:

导入分类

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #c81b13 }
span.s1 { color: #822d0f }
span.s2 { }

#import "NSAttributedString+Emoji.h"

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #000000 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #3e1e81 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #1e9421 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #c81b13 }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #6122ae }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #000000; min-height: 21.0px }
span.s1 { }
span.s2 { color: #c42275 }
span.s3 { color: #000000 }
span.s4 { font: 18.0px "PingFang SC" }
span.s5 { color: #6122ae }
span.s6 { color: #3e1e81 }
span.s7 { color: #294c50 }
span.s8 { color: #539aa4 }
span.s9 { color: #703daa }

- (void)viewDidLoad {

[super viewDidLoad];

//    _myLabel.font = [UIFont systemFontOfSize:15];

//@"家里真没人 "

//正则表达式 [] 是特殊字符

NSString *str = @"女神: s012 家里真没人 s010 202 s018 ";

NSMutableAttributedString *mAttributedStr = [[NSMutableAttributedString alloc]initWithString:str];

NSAttributedString *attrobutedStr = [NSAttributedString emojiStringWithString:mAttributedStr];

_myLabel.attributedText = attrobutedStr;

}

实现的效果:



附件: 分类的代码

.h:

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #1e9421 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #000000; min-height: 21.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #c81b13 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #000000 }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #c42275 }
span.s1 { }
span.s2 { font: 18.0px "PingFang SC" }
span.s3 { color: #822d0f }
span.s4 { color: #c42275 }
span.s5 { color: #6122ae }

//

//  NSAttributedString+Emoji.h

//  MiYa

//

//  Created by 李洪强 on 17/07/06.

//  Copyright (c) 2017年 . All rights reserved.

//

#import <Foundation/Foundation.h>

@interface NSAttributedString (Emoji)

+ (NSAttributedString *)emojiStringWithString:(NSMutableAttributedString *)emojiString;

@end

--------------------------------------------------------------------------------------

.m:

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #1e9421 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #000000; min-height: 21.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #c81b13 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #000000 }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #c42275 }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #3e1e81 }
span.s1 { }
span.s2 { font: 18.0px "PingFang SC" }
span.s3 { color: #822d0f }
span.s4 { color: #c42275 }
span.s5 { color: #6122ae }
span.s6 { color: #703daa }
span.s7 { color: #3e1e81 }
span.s8 { color: #0435ff }
span.s9 { color: #000000 }
span.s10 { color: #c81b13 }
span.s11 { color: #3c828b }
span.s12 { color: #1e9421 }
span.s13 { font: 18.0px "PingFang SC"; color: #1e9421 }
span.s14 { color: #294c50 }

//

//  NSAttributedString+Emoji.m

//  MiYa

//

//  Created by 李洪强 on 17/07/06.

//  Copyright (c) 2017年 . All rights reserved.

//

#import "NSAttributedString+Emoji.h"

#import <UIKit/UIKit.h>

@interface EmojiAttachment : NSTextAttachment

@end

@implementation EmojiAttachment

//I want my emoticon has the same size with line‘s height

- (CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex

{

return CGRectMake( 0 , -3, lineFrag.size.height, lineFrag.size.height);

}

@end

@implementation NSAttributedString (Emoji)

+ (NSAttributedString *)emojiStringWithString:(NSMutableAttributedString *)emojiString

{

NSRegularExpression *regularEx = [NSRegularExpression regularExpressionWithPattern:@"s[0-9]{3}" options:NSRegularExpressionCaseInsensitive error:nil];

NSString *string = emojiString.string;

NSTextCheckingResult *result = [regularEx firstMatchInString:string options:NSMatchingReportCompletion range:NSMakeRange(0, string.length)];

if (result != nil) {

NSString *imageName = [NSString stringWithFormat:@"%@.png", [string substringWithRange:result.range]];

EmojiAttachment *attachment = [[EmojiAttachment alloc] initWithData:nil ofType:nil];

attachment.image = [UIImage imageNamed:imageName];

NSAttributedString *attrString = [NSAttributedString attributedStringWithAttachment:attachment];

[emojiString replaceCharactersInRange:result.range withAttributedString:attrString];

// 递归

[self emojiStringWithString:emojiString];

} else {

return emojiString;

}

return emojiString;

}

@end

李洪强  2017 07 06于北京

时间: 2024-10-03 17:43:52

iOS正则表达式的使用案例-富文本的相关文章

iOS开发--使用NSMutableAttributedString 实现富文本

在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都比较麻烦,而且很多UILabel的属性也不起作用了,效果都不理想.后来了解到NSMuttableAttstring(带属性的字符串),上面的一些需求都可以很简便的实现. 实例化方法和使用方法 实例化方法: 使用字符串初始化 - (id)initWithString:(NSString *)str; 例: N

iOS之富文本总结

文章内容大纲 1.NSMutableAttributedString的基本使用 2.NSMutableAttributedString的简易封装 3.使用开源代码GOBMarkupPaser处理富文本 4.UITextKit简介 5.编程思想的相关思考 前言 富文本使用案例: 这里我自己也用了富文本实现了简单的却也是常用的例子: 对于最后面的¥50中划线这种设置,估计只有富文本最好用了. 在IOS或者Mac OS X通过UIKit提供的用来显示字符串控件有三个: UILable,UITextFi

[iOS] 利用 NSAttributedString 进行富文本处理

/iOS /[iOS] 利用 NSAttributedString 进行富文本处理 2016年4月4日 刘小龙 iOS 许多时候我们需要以各种灵活的形式展现文本信息,即富文本.普通的 text 属性显然无法满足要求,这时我们需要利用 Foundation 中的 NSAttributedString--属性字符串进行设置.拥有文本显示功能(text 属性)的 UI 控件也都拥有 attributedText 属性. 常用方法 和 NSString 及 Foundation 框架其它集合一样,NSA

iOS富文本组件的实现—DTCoreText源码解析 数据篇

本文转载 http://blog.cnbang.net/tech/2630/ DTCoreText是个开源的iOS富文本组件,它可以解析HTML与CSS最终用CoreText绘制出来,通常用于在一些需要显示富文本的场景下代替低性能的UIWebView,来看看它是怎样解析和渲染HTML+CSS的,总体上分成两步: 数据解析—把HTML+CSS转换成NSAttributeString 渲染—用CoreText把NSAttributeString内容渲染出来,再加上图片等元素 本篇先介绍第一步,数据解

iOS 富文本格式字符 以及处理iOS8下textview设置富文本后输入bug

iOS的富文本设置,在iOS8下在textView的代理方法中设置textview的attributedText时,会出现富文本格式未加到text上的情况,可以在初始化时将文本属性赋给textview的typingAttributes.代码如下: NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.lineSpacing = 7;// 字体的行间距 UIF

iOS之富文本

之前做项目时遇到一个问题: 使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结果在XCode中查遍其所有属性才发现,UITextView居然没有调整行间距的接口,于是忍住不心里抱怨了一下下. 但是问题还是要解决的,上网一查才发现,iOS不仅有富文本处理的功能,而且对于文字排版的处理能力那是相当的强大,看来我是孤陋寡闻了. 正题开始之前插播一点基础知识: 在iOS中或者Mac OS X中怎样才能

iOS 富文本

富文本 http://pan.baidu.com/s/1pJnY8BL 把这里下载的文件夹拖进自己的工程 引入头文件 #import "OHAttributedLabel.h" #import "OHParagraphStyle.h" #import "OHTouchesGestureRecognizer.h" 引入这3个头文件 添加 CoreText.framework // 创建富文本string NSMutableAttributedStr

iOS之富文本(二)

之前做项目时遇到一个问题: 使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结果在XCode中查遍其所有属性才发现,UITextView居然没有调整行间距的接口,于是忍住不心里抱怨了一下下. 但是问题还是要解决的,上网一查才发现,iOS不仅有富文本处理的功能,而且对于文字排版的处理能力那是相当的强大,看来我是孤陋寡闻了. 正题开始之前插播一点基础知识: 在iOS中或者Mac OS X中怎样才能

ios富文本

之前做项目时遇到一个问题: 使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结果在XCode中查遍其所有属性才发现,UITextView居然没有调整行间距的接口,于是忍住不心里抱怨了一下下. 但是问题还是要解决的,上网一查才发现,iOS不仅有富文本处理的功能,而且对于文字排版的处理能力那是相当的强大,看来我是孤陋寡闻了. 正题开始之前插播一点基础知识: 在iOS中或者Mac OS X中怎样才能