正则表达式不尊重长度限制

时间:2017-08-12 21:50:33

标签: java regex

我在Java中使用以下正则表达式来匹配用户名:

^(?!.*\\..*\\..*)[A-Za-z]([A-Za-z0-9.]*[A-Za-z0-9]){8,15}$

我希望这个正则表达式与包含所有字母数字字符的字符串匹配(以字母开头),中间允许最多一个句点(点),大小在8到15之间。

因此,它有两个问题:

  1. 它不接受长度为8的字符串。它接受最小长度为9的字符串。
  2. 长度没有上限。它匹配任何超过8个字符的字符串。
  3. 为什么不考虑{8,15}

1 个答案:

答案 0 :(得分:1)

问题1 :您之前需要量化至少需要[A-Za-z0-9] [A-Za-z0-9.][A-Za-z]的群组。因此已经需要至少8个字符。另外,你的正则表达式在此构造之前需要[A-Za-z0-9.]*,至少需要9个字符。

问题2 :您正在量化一个包含{8,15}任意金额且此^(?![^.]*\\.[^.]*\\.)[A-Za-z](?:\\.?[A-Za-z0-9]){7,14}$ 的组,因此上限为15x(任意金额)=∞< / p>

猜猜你之后的正则表达式看起来与此相似:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.Chrome()
driver.get("https://acwi.gov/monitoring/vm/programs/vm_map.html")
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_all_elements_located((By.TAG_NAME, 'iframe')))
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
for item in driver.find_elements_by_xpath("//g[@id='NWQMC_VM_directory_June2016_3915_0_layer']"):
    item.find_element_by_xpath(".//circle[@fill='rgb(237, 81, 81)']").click()

driver.quit()

See demo and more explanation at regex101