搜索
aardio官方社区 门户 查看主题

条件表达式模式匹配问题

发布者: ejzhang | 发布时间: 2017-3-18 21:29| 查看数: 836| 评论数: 10|帖子模式

本帖最后由 ejzhang 于 2017-3-18 21:34 编辑

模式匹配条件表达式,表达式以“=、<、>、<=、>=、!=、<>”开始(可省略),后跟数字或字符串。
各模式单独测试都可以,放到一起就匹配不到,请帮忙看一下怎么修改,谢谢!
现在有两个问题:
1、“(=|\<|\>|<\<=>|<\>=>|<!=>|<\<\>>)”怎么匹配0次或1次?在后面加“?”就无法匹配了;
2、“<-?\d+>”和“%''”单独匹配都可以,用“|”放在一起就不行了。

最新评论

ejzhang 发表于 2017-3-18 21:32:03
  1. for (k,v in {"123";"-234";"=345";"<=456";">=567";"!=678";"<>789";"='sde'";"!='jhi'"}){
  2.     console.log( v, "=>", string.find( v, `^(=|\<|\>|<\<=>|<\>=>|<!=>|<\<\>>)\s*(<-?\d+>)\s* ) );
  3.     console.log( v, "=>", string.find( v, `^(=|\<|\>|<\<=>|<\>=>|<!=>|<\<\>>)\s*(%'')\s* ) );
  4.     console.log( v, "=>", string.find( v, `^(=|\<|\>|<\<=>|<\>=>|<!=>|<\<\>>)\s*(<-?\d+>|%'')\s* ) );
  5. }
复制代码
ejzhang 发表于 2017-3-18 23:04:29
本帖最后由 ejzhang 于 2017-3-18 23:08 编辑
  1. import console;

  2. for (k,v in {"123";"-234";"=345";"<=456";">=567";"!=678";"<>789";"='sde'";"!='jhi'"}){
  3.     console.log( v, "=>", string.find( v, "^(=|\<|\>|<\<=>|<\>=>|<!=>|<\<\>>)\s*(<-?\d+>)\s*$" ) );
  4.     console.log( v, "=>", string.find( v, "^(=|\<|\>|<\<=>|<\>=>|<!=>|<\<\>>)\s*(%'')\s*$" ) );
  5.     console.log( v, "=>", string.find( v, "^(=|\<|\>|<\<=>|<\>=>|<!=>|<\<\>>)\s*(<-?\d+>|%'')\s*$" ) );
  6. }

  7. console.pause();
复制代码
lm752213730 发表于 2017-3-20 09:12:12
你这匹配的太繁琐了,你要匹配什么结果?
ejzhang 发表于 2017-3-20 09:21:34
lm752213730 发表于 2017-3-20 09:12
你这匹配的太繁琐了,你要匹配什么结果?

我想匹配以“=、<、>、<=、>=、!=、<>”开头(可以没有),数字或字符串结尾的结果,就是匹配123、=234、<=345、'abc'、!='def'这样的字符串。
ejzhang 发表于 2017-3-20 10:19:27
本帖最后由 ejzhang 于 2017-3-20 10:25 编辑

继续发现问题,为什么单独的“<”、“>”和“!”无法匹配?
  1. import console;

  2. for (k,v in {"=";"!=";"<";"<=";">";">=";"<>"}){
  3.     console.log( v, "=>", string.find( v, `<@<>@>|<[><!]?=>` ) );
  4. }

  5. console.pause();
复制代码
lm752213730 发表于 2017-3-20 10:40:55
ejzhang 发表于 2017-3-20 10:19
继续发现问题,为什么单独的“”和“!”无法匹配?

因为你模式的第二段意思是 必须带有=
lm752213730 发表于 2017-3-20 10:41:40
ejzhang 发表于 2017-3-20 10:19
继续发现问题,为什么单独的“”和“!”无法匹配?

把=放到[]里面就可以了
ejzhang 发表于 2017-3-20 10:49:55
lm752213730 发表于 2017-3-20 10:41
把=放到[]里面就可以了

谢谢!我错了
ejzhang 发表于 2017-3-20 13:28:20
通过两次模式匹配解决了。
  1. for (k,v in {"123";"-234";"=345";"<=456";">=567";"!=678";"<>789";"='sde'";"!='jhi'"}){
  2.     var symbol, value = string.match( v, "^[\s ]*(<@<>@>|<[!<>]=>|<[=<>]>)[\s ]*(<-?\d+>|<'[^']+'>)[\s ]*$" );
  3.     if ( !value ) value = string.match( v, "^[\s ]*(<-?\d+>|<'[^']+'>)[\s ]*$" );
  4.     console.log(k, v, symbol, value);
  5. }
  6. console.pause();
复制代码

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2017-11-23 20:55 , Processed in 0.046875 second(s), 18 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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