意思是,我想匹配:
$10
或
$
但不是这样:
${name}
或:
$image{http://wrfgadgadga.com/gadgad.png}
我也希望匹配其他所有内容......普通字符,符号,数字等。
匹配所有内容,但以$开头的内容很容易。就像这样:
def literalCharacter: Parser[String] = """[^\$]""".r
我已经尝试过使用(?!i)或(?!{)多种组合的正则表达式前瞻语法,但我似乎无法让它工作。我也试过用=代替它来重写它!像这样:(?= i)
基本上,我已经尝试用我可以用[^ \ $]表达式进行成像的各种方式注入这些预测,但我无法使其工作。
帮助?
编辑:嗯,这似乎有效:
[^\$]|\$(?!i)|\$(?!\{)
答案 0 :(得分:3)
您的内容无法正确匹配x$
等字符串。如果要匹配整个字符串,请尝试
"""^\$$|^[^\$].*$|^\$[^i\{].*$"""
我们匹配由|
分隔的三个序列中的任何一个:
^\$$
^[^\$]+.*$
^\$[^i\{]+.*$
让我们把它分开:
// First pattern--match lone '$' character
^ // Matches start of string
\$ // Matches the literal character '$'
$ // Matches end of string
// Second pattern--match a string starting with a character other than '$'
^ // Start of string
[^\$]+ // Match at least one non-'$':
+ // Match one or more
[^ ] // ...of characters NOT listed...
\$ // ...namely, a literal '$'
.* // Any number of other characters
$ // End of the string
// Third pattern--match a string starting with '$' but not '$i' or '${'
^ // Start of string
\$ // The literal character '$'
[^i\{]+ // Match at least one non-'i'/non-'{'
.* // Any number of other characters
$ // End of the string
如果您不匹配整个字符串,则必须担心foo$image{Hi}
之类的问题。如果您还想匹配空字符串,请在匹配前添加^$|
。
请注意,这是专门针对正则表达式编写的,而不是考虑到解析器组合。根据您拥有的其他规则,您可能想要也可能不想匹配整个字符串。