【lua】如何倒序查找字符

  现在有这样一个需求,有一个字符串,需要查找字符i最后出现的位置,不过相对于其他语言来说,Lua并没有提供这一操作,那么如何是好?



  现在有这样几个方法:

  string.sub(str, i ,j)

    功能:截取str以i开始j结束的部分

  string.reverse(str)

    功能:将str倒序输出

  string.len(str)

    功能:返回str的长度

  string.find(str, pattern, init, plain)

    功能:查找到指定字符在str的起始位置。其中str为源字符串,pattern为需要查找的字符,init为开始查找的位置,在Lua中,"1,2"表示从开始起,"-1,-2"表示从结尾起。



  好了,了解了这几字符串操作方法就可以来做事了:

  可以这么来构想,如果要查询字符i在字符串str中最后出现的位置,可以先把str反转,然后从头开始查找i的位置,再用字符串str的长度减去反转后查找到的位置(这里得加上1),这样就可以知道字符i在字符串str中倒序查找的位置了。

  试一试吧:

 1 str = "/www/var/tmp/temp.lua"
 2
 3 function subString(str, k)
 4     ts = string.reverse(str)    //反转字符串str
 5     _, i = string.find(ts, k)   //获取k在反转后的str字符串ts的位置
 6     m = string.len(ts) - i + 1   //获取k在字符串str中的位置
 7
 8     return string.sub(str, 1, m)  //返回字符串str字符k之前的部分
 9 end
10
11 print(subString(str, "/"))

  输出:

时间: 2024-10-10 12:32:00

【lua】如何倒序查找字符的相关文章

Oracle 截取、查找字符函数(持续更新)

整理一些常用的截取.查找字符函数: 1.查找某一个字符串中某一个字符(串)出现的次数 SELECT LENGTH(REGEXP_REPLACE(REPLACE('anne<br>lily<br>jane', '<br>', '@'),  '[^@]+',  '')) COUNT FROM DUAL; --返回2 2.判断某个字符是否在源字符串出现过select instr('anne<br>lily<br>jane','<br>',1

java替换字符串和用indexof查找字符

java自带替换 String s="hlz_and_hourui哈哈"; String new_S=s.replaceAll("哈", "笑毛"); System.out.println(new_S); 则输出为:"hlz_and_hourui笑毛笑毛"; 1 package find_repalce_keywords; 2 3 import java.io.BufferedReader; 4 import java.io.

Js对象查找字符个数及出现的最多个数

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Js对象查找字符个数及出现的最多个数</title> 6 </head> 7 <body> 8 9 </body> 10 </html> 11 <script> 12 var s

C语言查找字符串并返回索引

C语言本身没有查找字符串并返回索引的函数,虽然说自己写一个查找函数也能获取索引,但是下面的方法更简便 C语言有一个strchr函数用于查找字符出现的第一个位置,关键就是这个函数,如果巧用,也可以获得找到的字符串的索引 1 char *str_1 = "wtwq211"; 2 char *str_2 = strchr(str_1, 'q'); 3 printf("%s\n", str_2); 4 5 int index=str_2 - str_1; 6 printf(

Linux grep 查找字符所在文件(grep详解)

查找字符所在文件 grep -ir "S_ROLE"  ./* -i 不区分大小写 -r 查找字符出处 -a   --text   #不要忽略二进制的数据. -A<显示行数>   --after-context=<显示行数>   #除了显示符合范本样式的那一列之外,并显示该行之后的内容. -b   --byte-offset   #在显示符合样式的那一行之前,标示出该行第一个字符的编号. -B<显示行数>   --before-context=<

1、查找字符位置函数

strpos($str,search,[int]):查找search在$str中的第一次位置从int开始: stripos($str,search,[int]):函数返回字符串在另一个字符串中第一次出现的位置.该函数对大小写不敏感strrpos($str,search,[int]):查找search在$str中的最后一次出现的位置从int 2.提取子字符函数(双字节) submit($str,int start[,int length]):从$str中strat位置开始提取[length长度的字

php的stristr()函数,查找字符

1.用法,要传2个参数 stristr(string,search):查找并返还匹配后,剩下的部分字符串 查找过程不区分大小写,要区分大小写用 strstr(string,search)少一个字母i search:要查找的字符.如果该参数是数字,则搜索匹配该数字对应的 ASCII 值的字符.(所以要注意是否为数字) 如果成功,则返回字符串的其余部分(从匹配点).如果没有找到该字符串,则返回 false. 例子: <?php echo stristr("Hello world!",

字符串拆分-查找字符

1 package demo3; 2 3 import java.util.Scanner; 4 5 //输入一个字符串,仔输入要查找的字符,判断该字符仔输入字符串中出现的次数 6 public class FindStr { 7 public static void main(String[] args) { 8 Scanner input=new Scanner(System.in); 9 System.out.print("请输入字符串:"); 10 String str=inp

Delphi通过查找字符定位TADOQuery数据的位置

通过TADOQuery的方法Locate,输入字符,查找到定位到对应的数据位置,优点快速定位,缺点是只匹配查找到的和第一个位置,无法连续定位下一个! //定位qrymembertype.Locate('Cname', Cname, [loCaseInsensitive]); 'Cname'列名Cname 所匹配的值loCaseInsensitive, loPartialKey] 不区分大小写,部分匹配[loCaseInsensitive] 不区分大小写[loPartialKey] 部分匹配[]