递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
楼主: Yes
打印 上一主题 下一主题

[安卓] 想实现正则批量取文本返回文本数组,有点问题不懂。

[复制链接]

18

主题

337

帖子

2919

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2919
11#
发表于 2024-11-8 17:26:29 | 只看该作者
本帖最后由 weilai 于 2024-11-8 17:30 编辑
weilai 发表于 2024-11-8 10:45
主要是没用过正则,要是不用正则的话,取起来感觉简单
<火山程序 类型 = "通常" 版本 = 1 />

方法 非正则取中间文本 <公开 类型 = 文本数组类>
参数 原文本 <类型 = 文本型>
参数 左文本 <类型 = 文本型>
参数 右文本 <类型 = 文本型>
{
    变量 长度 <类型 = 整数>
    变量 左长度 <类型 = 整数>
    变量 右长度 <类型 = 整数>
    变量 左首字符 <类型 = 字符>
    变量 右首字符 <类型 = 字符>
    变量 i <类型 = 整数 值 = 0>
    变量 左已匹配 <类型 = 整数 值 = -1>
    变量 左右文本是否相等 <类型 = 逻辑型 值 = 假>
    变量 返回值 <类型 = 文本数组类>
    长度 = 取文本长度 (原文本)
    左长度 = 取文本长度 (左文本)
    右长度 = 取文本长度 (右文本)
    如果 (长度 < 1 || 左长度 < 1 || 右长度 < 1)//此处没有处理左右文本为空文本的情况
    {
        返回(返回值)
    }
    左首字符 = 取文本字符 (左文本, 0)
    右首字符 = 取文本字符 (右文本, 0)
    如果 (左文本 == 右文本)
    {
        左右文本是否相等 = 真
    }
    i = -1
    判断循环 (i < 长度)
    {
        i = i + 1
        判断循环 (i < 长度 && 取文本字符 (原文本, i) != 左首字符 && 取文本字符 (原文本, i) != 右首字符)
        {

            i = i + 1
        }
        如果 (i >= 长度)
        {
            返回 (返回值)
        }
        变量 临时 <类型 = 整数>
        变量 j <类型 = 整数>
        如果 (取文本字符 (原文本, i) == 右首字符)
        {
            如果 (左已匹配 > 0)  // 右已经匹配匹配左边
            {
                临时 = i
                循环 (1, 右长度, j)
                {
                    临时 = 临时 + 1
                    如果 (临时 > 长度)
                    {
                        返回 (返回值)
                    }

                    如果 (取文本字符 (原文本, 临时) != 取文本字符 (右文本, j))
                    {
                        跳出循环
                    }

                }
                如果 (j == 右长度)  // 匹配成功
                {
                    返回值.添加成员 (取子文本 (原文本, 左已匹配 + 左长度, i - 左已匹配 - 左长度))
                    如果 (左右文本是否相等 == 真)//这里处理如果左右文本相等的情况
                    {
                        左已匹配 = i
                    }

                    i = i + 右长度
                    到循环尾


                }



            }

        }

        如果 (取文本字符 (原文本, i) == 左首字符)
        {
            临时 = i
            循环 (1, 左长度, j)
            {
                临时 = 临时 + 1
                如果 (临时 >= 长度)
                {
                    返回 (返回值)
                }
                如果 (取文本字符 (原文本, 临时) != 取文本字符 (左文本, j))
                {
                    跳出循环
                }

            }
            如果 (j == 左长度)  // 匹配成功
            {
                左已匹配 = i
                i = i + 左长度
                到循环尾
            }



        }

    }
    返回 (返回值)
}

回复

使用道具 举报

33

主题

284

帖子

2341

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2341
12#
发表于 2024-11-9 12:04:53 | 只看该作者
正则取文本中间.rar (85.07 KB, 下载次数: 4)

反正闲也是闲着,不如直接动手了


回复

使用道具 举报

9

主题

86

帖子

271

积分

中级会员

Rank: 3Rank: 3

积分
271
13#
 楼主| 发表于 2024-11-9 13:42:06 | 只看该作者
兵三进一 发表于 2024-11-9 12:04
反正闲也是闲着,不如直接动手了

高手就是不一样,代码真简练。
请问"\r\n",这是是代表什么?
回复

使用道具 举报

33

主题

284

帖子

2341

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2341
14#
发表于 2024-11-9 14:24:31 | 只看该作者
Yes 发表于 2024-11-9 13:42
高手就是不一样,代码真简练。
请问"\r\n",这是是代表什么?

"\r\n"就是易语言中的 #换行符

在这个网页源码中其实不用替换,这只是我个人的习惯操作!
回复

使用道具 举报

9

主题

86

帖子

271

积分

中级会员

Rank: 3Rank: 3

积分
271
15#
 楼主| 发表于 2024-11-9 14:51:21 | 只看该作者
学到了谢谢!
回复

使用道具 举报

18

主题

337

帖子

2919

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2919
16#
发表于 2024-11-9 17:48:46 | 只看该作者
非正则其实也可以写的很短的
回复

使用道具 举报

18

主题

337

帖子

2919

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2919
17#
发表于 2024-11-9 17:50:36 | 只看该作者
本帖最后由 weilai 于 2024-11-10 11:55 编辑

回复

使用道具 举报

18

主题

337

帖子

2919

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2919
18#
发表于 2024-11-9 18:27:11 | 只看该作者
weilai 发表于 2024-11-9 17:50
方法 非正则取中间文本1
参数 原文本
参数 左文本

修改了下这样效果就一样了:噜阿噜
回复

使用道具 举报

18

主题

337

帖子

2919

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2919
19#
发表于 2024-11-9 19:59:52 | 只看该作者
本帖最后由 weilai 于 2024-11-10 11:56 编辑

回复

使用道具 举报

9

主题

86

帖子

271

积分

中级会员

Rank: 3Rank: 3

积分
271
20#
 楼主| 发表于 2024-11-11 15:59:18 | 只看该作者
weilai 发表于 2024-11-9 18:27
修改了下这样效果就一样了:噜阿噜

不用正则也可以解决的比较完美,就是代码繁琐了一些。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-23 16:30 , Processed in 0.098330 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表