java 正则表达前匹配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 正则表达前匹配相关的知识,希望对你有一定的参考价值。

我要做一个这个功能,就是如果穿过来的正则表达式是前匹配的,比如 手机*,这种就是前面和准确查询,后面是模糊的,然后我要抽取前面的那几个准确的字符出来。该怎么做呢

substring是java本身的方法
其实可以转嫁为sql的正则表达式哦
sql语句like
参考技术A substring 参考技术B \^手机%\ 参考技术C \n手机*\n 参考技术D like 手机%

正则表达式

规则

元字符

1. 匹配字符
  1. . 匹配任意一个字符
  2. [] 匹配[]中列举的字符
  3. \d 匹配数字
  4. \D 匹配非数字
  5. \s 匹配空白
  6. \S 匹配非空白
  7. \w 匹配配单词(a-z, A-Z, 1-9)
  8. \W 匹配非单词
2. 匹配数量
    • 匹配前一个字符出现0到多次
    • 匹配前一个字符至少出现一次
  1. ? 匹配前一个字符出现0次或者1次,(要么一次, 要么没有) # 注意: 如果?前面是跟的数量,则是取消贪婪
  2. m 匹配前一个字符出现m次, 出现
  3. m, 匹配前一个字符至少出现m次, 至少出现
  4. m, n 匹配前一个字符出现 m到n次

3. 匹配边界

  1. ^ 匹配开头
  2. $ 匹配结尾
  3. \b 匹配单词边界 (代表单词的开头或结尾, 它只匹配一个位置)
  4. \B 匹配非单词边界

4. 匹配分组

  1. | 匹配左右任意一个表达式
  2. (ab) 将括号中字符作为一个分组
  3. \num 引用分组num匹配到的字符串
  4. (?) 分组起别名
  5. (?P=name) 引用别名为name分组匹配到的字符串

例子

方法

1. findall方法: 在字符串中找到正则表达式所匹配的所有子串, 并返回一个列表,如果没有找到匹配的, 则返回一个空列表

2. match方法: 尝试从字符串的起始位置匹配一个模式, 匹配成功(只匹配一个)返回的是一个匹配对象(这个对象包含了我们匹配的信息), 如果不是起始位置匹配成功的话, match()返回的是空

3. search方法: 扫描整个字符串, 匹配成功返回的是一个匹配对象 (search也只能匹配到一个, 找到符合规则的就返回, 不会一直往后找)

# 正则匹配
import re

s = '111111111111111111'
# 1. findall
res = re.findall(r'12,5', s)      # 注意2,5 ,逗号后面不能有空格, 即不能2, 5
print(res)      # ['11111', '11111', '11111', '111']        # 默认是贪婪的,按最多的匹配

res2 = re.findall(r'12,5?', s)    # 在数量后面加上问号, 取消贪婪, 即会按照数量最少的匹配
print(res2)         # ['11', '11', '11', '11', '11', '11', '11', '11', '11']


# 2. match
res3 = re.match(r'python', 'ipython')
print(res3)     # None


# 3. search
res4 = re.search(r'python', 'ipython')
print(res4)
print(res4.group())

my_str = 'hello world hello python hh'
res = re.findall(r'\bhello\b', my_str)  # 匹配单词边界
print(res)



# 正则分组
res = re.match(r'<h1>(.*)</h1>', '<h1>itcast匹配分组</h1>')
print(res)
print(res.group())     # 默认是传 0 即 res.group(0)
print(res.group(1))    # group(1)  表示正则匹配中出现的第一组括号中的内容
print(res.groups())     # 拿到全部的分组, 放到一个元组中

# s = '<html><h1>海马itcast</h1></html>'
# res = re.match(r'<.+><.+>.*</.+></.+>', s)      # 引出引用分组, 因为这样, 前后的标签不相同也会匹配上
# print(res.group())

s = '<html><h1>海马itcast</h1></html>'
res = re.match(r'<(.+)><(.+)>.*</\2></\1>', s)   # \2 引用第二个括号的内容,   \1 引用第一个括号匹配到的内容
# print(res.group())
res = re.match(r'<(?P<key1>.+)><(?P<key2>.+).*</(?P=key2)></(?P=key1)>', s)
print('分组起名及引用: res'.format(res.group()))


# 匹配邮箱
# a-z A-Z 0-9 _  @163 126 gmail qq   .    com cn net
p = r'(\w+)@(163|126|gmail|qq)\.(com|cn|net)'
res = re.match(p, '1987719593@qq.com')
print(res)

以上是关于java 正则表达前匹配的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配指定数据和字母

java 正则表达式 前4位必须全部是字母,怎么写?

PHP中正则表达式匹配字母

根据返回的结果和前一个正则表达式的规则创建一个新的正则表达式 |索引正则表达式并查看正则表达式如何匹配子字符串

python 正则表达式字符说明

python正则表达式