weilai 发表于 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 + 左长度
                到循环尾
            }



      }

    }
    返回 (返回值)
}

兵三进一 发表于 2024-11-9 12:04:53



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


Yes 发表于 2024-11-9 13:42:06

兵三进一 发表于 2024-11-9 12:04
反正闲也是闲着,不如直接动手了

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

兵三进一 发表于 2024-11-9 14:24:31

Yes 发表于 2024-11-9 13:42
高手就是不一样,代码真简练。
请问"\r\n",这是是代表什么?

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

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

Yes 发表于 2024-11-9 14:51:21

学到了谢谢!

weilai 发表于 2024-11-9 17:48:46

非正则其实也可以写的很短的

weilai 发表于 2024-11-9 17:50:36

本帖最后由 weilai 于 2024-11-10 11:55 编辑

weilai 发表于 2024-11-9 18:27:11

weilai 发表于 2024-11-9 17:50
方法 非正则取中间文本1
参数 原文本
参数 左文本


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

weilai 发表于 2024-11-9 19:59:52

本帖最后由 weilai 于 2024-11-10 11:56 编辑

Yes 发表于 2024-11-11 15:59:18

weilai 发表于 2024-11-9 18:27
修改了下这样效果就一样了:噜阿噜

不用正则也可以解决的比较完美,就是代码繁琐了一些。
页: 1 [2] 3
查看完整版本: 想实现正则批量取文本返回文本数组,有点问题不懂。