如果没有正则表达式失败

时间:2016-08-11 18:41:49

标签: regex

我想写一个正则表达式来查找单词是否长度为3个字符,但前面<ClinicalDocuments> <ClinicalDocument xmlns="urn:hl7-org:v3" xmlns:voc="urn:hl7-org:v3/voc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:axolotl="urn:axolotl-com:pdo"> <realmCode code="US"/> <typeId extension="POCD_HD000040" root="2.16.840.1.113883.1.3"/> <templateId root="1.3.6.1.4.1.19376.1.5.3.1"/> <templateId root="1.3.6.1.4.1.19376.1.5.3.1.1"/> <templateId root="1.3.6.1.4.1.19376.1.5.3.1.1.1"/> <templateId root="2.16.840.1.113883.10.20.3"/> <templateId root="2.16.840.1.113883.10.20.1"/> <templateId root="2.16.840.1.113883.3.88.11.32.1"/> <id root="006e50e9-29b5-4ab2-8c0b-202819b39646"/> blah blah </ClinicalDocument> <ClinicalDocument xmlns="urn:hl7-org:v3" xmlns:voc="urn:hl7-org:v3/voc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> blah blah... </ClinicalDocument> </ClinicalDocuments> 是可选的。在这种情况下,m_后跟至少3个字符。

基本上我想匹配

m_Abc且不匹配m_abcab

m_ac

我尝试了一个if循环,但它也与文本(^(m_))?([a-zA-Z0-9_]{3,})|(^[a-zA-Z0-9_]{3,}$) 匹配。 你能帮我解决一下我在这里失踪的事吗

也许我写的正则表达式错了。 我想要类似的东西 if(m_ found)      “后跟3个字符” 其他      “看看总字符数是否为3”

感谢。

3 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式,该表达式要么在开始时需要m_,要么禁止它(通过负向预测):

^(m_|(?!m_))\w{3,}$

请参阅regex tester

如果负面的look-head不是你可以使用的功能,那么你可以选择这个更精细的正则表达式,它通过前两个字符的不同选项:

^(m_\w{3,}|m[A-Za-z0-9]\w+|[A-Za-ln-z0-9]\w{2,})$

请参阅regex tester

答案 1 :(得分:0)

你想让你的3个字符的单词能够有下划线吗?因为如果没有,那么您可以将[a-zA-Z0-9_]更改为[a-zA-Z0-9],在这种情况下它不应与m_a匹配。除非您想匹配数字,否则可以将其进一步简化为[a-zA-z]

答案 2 :(得分:0)

主要错误是^行锚在可选的括号表达式中。您希望无条件地开始行,然后是可选的m_?

您可以显着简化其余部分。通过需要三个字符的表达式捕获三个或更多个;无论你是否在输入的末尾,正则表达式都会成功。

^(m_)?[a-zA-Z0-9_]{3}

角色类中的下划线似乎有点可疑。你真的打算用“单词”来包含下划线吗?然后m_ac也将匹配,因为它至少有三个字符长,并且由集合中的字符组成,即使您说它是特别禁止的。