正则表达式模式匹配后面不跟冒号的字符串

标签 regex pcre

使用正则表达式,我尝试匹配满足以下条件的任何字符串(按显示的顺序):

  • 包含美元符号$;那么
  • 至少一个字母[a-zA-Z];那么
  • 零个或多个字母、数字、下划线、句点(点)、左括号和/或右括号[a-zA-Z0-9_.\[\]]*;那么
  • 一个管道符|;那么
  • 一个符号@;那么
  • 至少一个字母[a-zA-Z];那么
  • 零个或多个字母、数字和/或下划线[a-zA-Z0-9_]*;那么
  • 零冒号:

换句话说,如果在字符串末尾找到冒号,那么它应该算作匹配。

以下是一些有效匹配的示例:

$tmp1|@hello
$x2.h|@hi_th3re
Valid match$here|@in_the middle of other characters

以下是一些无效匹配的示例:

$tmp2|@not_a_match:"because there is a colon"
$c.4a|@also_no_match:

以下是我尝试过的一些模式:

(\$[a-zA-Z])([a-zA-Z0-9_.\[\]]*)(\|@)([a-zA-Z][a-zA-Z0-9_]*(?!.[:]))
(\$[a-zA-Z])([a-zA-Z0-9_.\[\]]+)?(\|@)([a-zA-Z][a-zA-Z0-9_]*(?![:]))
(\$[a-zA-Z])([a-zA-Z0-9_.\[\]]+)?(\|@)([a-zA-Z][a-zA-Z0-9_]*)([^:])

最佳答案

此模式将满足您的需要

\$[A-Za-z]+[\w.\[\]]*[|]@[A-Za-z]+[\w]*+(?!:)

<强> Regex Demo

我使用所有格量词来减少使用 [\w]*+ 的回溯。您还可以使用原子组而不是所有格量词,例如

\$[A-Za-z]+[\w.\[\]]*[|]@[A-Za-z]+(?>[\w]*)(?!:)

注意

\w => [A-Za-z0-9_]

关于正则表达式模式匹配后面不跟冒号的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37627170/

相关文章:

regex - 为什么我的Perl单线报告 “Bareword found where operator expected”?

regex - 匹配从字符到行尾的正则表达式,但忽略最后一个字符

regex - 使用多个可能的分隔符从正则表达式中删除冗余

php - 如何匹配 php 中包含具有固定数量的字母数字字符的 https url 的字符串?

ASP.NET webforms 4.5 MapPageRoute Route Constraint w/regex 不起作用

regex - Visual Basic Excel 正则表达式 {}

regex - 为什么这里必须使用括号?

正则表达式仅在引号内匹配变量

php - 匹配序列的正则表达式?

regex - Unicode 正则表达式;无效的 XML 字符