我有文字:(珠三角:TLK-XX138832)
但是我似乎无法得到匹配并且括号导致问题。我是regex的新手,并多次尝试过不成功的比赛。
我认为这样可行,但却没有:\(PRD:[.]\)
我对.
的理解不正确吗?
我也试过了[a-zA-Z0-9\-]
,但这也不起作用,还有其他一些组合?
(TLK-XX138832可以是任何东西,只要它有PRD:和括号。)
答案 0 :(得分:3)
是的,您对.
的理解似乎不正确。它是一个特殊字符,被解释为“任何字符”。除了字符类(在方括号中),它表示“只是.
字符”。
正确的正则表达式可能是您想要的:
\(PRD:[^)]*\)
此处,[^)]
是一个字符类,意为“除)
以外的任何字符”。
您尝试做的是:
\(PRD:.*\)
但它可以匹配太多,例如,可以匹配:
(PRD:FOO) (PRD:BAR)
因为*
贪婪(它尽可能地匹配)。
如果您的正则表达式引擎支持它,您可以尝试(稍微更易阅读)非贪婪的变体:
\(PRD:.*?\)
这在功能上等同于第一种解决方案。
答案 1 :(得分:0)
您需要在匹配后附加*
以指定匹配多个匹配项。
使用:
\(PRD:[A-Z0-9-]*\)