关于日期、前后括号一致、偶数的相关正则表达式

javascript:
验证地址:https://tool.oschina.net/regex
1.写一个正则表达式来识别dd/mm/yyyy格式的日期。我期望dd的范围是01到31,mm的范围是01到12;yyy的范围是0001到9999,特别是不要是0000。
^((0[1-9])|([1|2]\d)|(3[0-1]))/((0[1-9])|(1[0-2]))/(\d{3}[1-9])$

2.写一个 正则表达式来识别形式为dd/mm/yyyy或dd.mm.yyyy的日期,但不使用 dd/mm.yyyy等混合分隔符。如果方便的话,您可以使用向后引用、负向前看和其他奇特的技巧。
^((((0[1-9])|([1|2]\d)|(3[0-1]))/((0[1-9])|(1[0-2]))/(\d{3}[1-9]))|(((0[1-9])|([1|2]\d)|(3[0-1]))\.((0[1-9])|(1[0-2]))\.(\d{3}[1-9])))$

3.解释正则表达式是否可以识别正确的括号,如(a)), 但不能(a))。
(?<=[^\(]+)\({2}[^\(|^\)]*\){2}(?=[^\)]+)
可以识别出知道前后括号个数的场景,匹配全部符合括号规则的内容需要在内容前后各加非括号字符。
如:“ ((123))((abcdef))qqqqqqqq(((456))qqq((xyz)))qqq((ABCD)) ”

4.(未标记)解释正则表达式/Whiske?y/的相关性
可以匹配Whiskey或Whisky,用在同字母多一少一都是一个意思的单词场景。

5.编写一个不带前导零的偶数集合的正则表达式(以10为基数;:所以字母表是[0-9])。注意:0 和2、10和20是偶数,前面没有零;00和02、1和01不是偶数,前面没有零。检查您的正则表达式是否接受100和10012。
^0|2|4|6|8|([1-9]\d*[0|2|4|6|8])$
----------------------------------------------------------------
java:
1.
^((0[1-9])|([1|2]\\d)|(3[0-1]))/((0[1-9])|(1[0-2]))/(\\d{3}[1-9])$
2.
^((((0[1-9])|([1|2]\\d)|(3[0-1]))/((0[1-9])|(1[0-2]))/(\\d{3}[1-9]))|(((0[1-9])|([1|2]\\d)|(3[0-1]))\\.((0[1-9])|(1[0-2]))\\.(\\d{3}[1-9])))$
3.
(?<=[^\\(]+)\\({2}[^\\(|^\\)]*\\){2}(?=[^\\)]+)
可以识别出知道前后括号个数的场景,匹配全部符合括号规则的内容需要在内容前后各加非括号字符。
如:“ ((123))((abcdef))qqqqqqqq(((456))qqq((xyz)))qqq((ABCD)) ”
4.
可以匹配Whiskey或Whisky,用在同字母多一少一都是一个意思的单词场景。
5.
^0|2|4|6|8|([1-9]\\d*[0|2|4|6|8])$

import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class RegexMatches
{
    public static void main( String[] args ){
      String s = " ((123))((abcdef))qqqqqqqq(((456))qqq((xyz)))qqq((ABCD)) ";
      String pattern = "(?<=[^\\(]+)\\({2}[^\\(|^\\)]*\\){2}(?=[^\\)]+)";
 
      Pattern r = Pattern.compile(pattern);
 
      Matcher matcher = r.matcher(s);
      int matcher_start = 0;
      while (matcher.find(matcher_start)){
          System.out.println(matcher.group(0));
          matcher_start = matcher.end();
      }
   }
}

结果:

((123))
((abcdef))
((ABCD))
posted @ 2021-02-04 22:13  你好创造者  阅读(201)  评论(0编辑  收藏  举报