Python正则表达式匹配它不应该的字符串

Ste*_*ong 0 python regex

我完全迷失了这个正则表达式如何匹配python中的这个字符串.有人能理解它吗?

import re
regex = "^PHP/5.\\{3|2\\}.\\{1|2|3|4|5|6|7|8|9|0\\}\\{1|2|3|4|5|6|7|8|9|0\\}$"
ua = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)'
re.compile(regex).search(ua)
Run Code Online (Sandbox Code Playgroud)

正则表达式以PHP字符串开头,而字符串则没有.难道不应该仅仅取消比赛的资格吗?

Sam*_*Sam 5

您需要为交替进行分组(最好是非捕获):

PHP/5.\\{(?:3|2)\\}.\\{(?:1|2|3|4|5|6|7|8|9|0)\\}\\{(?:1|2|3|4|5|6|7|8|9|0)\\}$
         ^^    ^       ^^                    ^      ^^                    ^
Run Code Online (Sandbox Code Playgroud)

另外,你将交替整个表达式:

  • PHP/5.\\{3 要么
  • 2 要么
  • \\}.\\{1 要么
  • 2 要么
  • 3 要么
  • 4 要么
  • 5 匹配发现!

想想PEMDAS和嵌套条件(if(a && (b || c)) { }).