我需要编写一个正则表达式来验证字符串是否包含{}但不是{或}。有人可以对此有所了解吗?
感谢所有帮助,以下是一些例子。
e.g。
有效:{abc},as09 {02} dd,{sdjafkl} sdjk,sfdsjakl,00 {00} 00,aaaaa {d}
无效:{sdsf,sdfadf},sdf {Sdfs,333} 333
*********更新*******************
^ [A-ZA-Z0-9_-。 ] (?:{[A-ZA-Z0-9 _-] +。})[A-ZA-Z0-9_-?。 ] $是我需要的,谢谢你的帮助:))
答案 0 :(得分:2)
/.*\{.*\}.*/
这将确保字符串在结束大括号之前的某处包含一个开口大括号,发生在字符串中的任何位置。但是,它无法确保只有一个开始和结束的大括号 - 要做到这一点,.*
模式必须更改为更严格的限制。
如果您想试验并测试这些正则表达式here's a good site。
答案 1 :(得分:1)
什么样的正则表达式?例如,在JavaScript中,这样做:
var re = /\{.*\}/;
alert("A: " + re.test("This {is} a match"));
alert("B: " + re.test("This {is not a match"));
alert("C: " + re.test("This } is not a match"));
提醒A: true
,B: false
和C: false
。
大多数其他口味都类似。
答案 2 :(得分:1)
对于这个问题,基于正则表达式的解决方案过于沉重。 如果您有机会不使用正则表达式 - 请不要,更简单的语句可以处理它。
即使是非常普遍的问题 - 检查,如果使用(可能嵌套的)括号是正确的 - 可以使用简单的一次通过循环来解决。
即。这是正确的
{}{{{}{}}}
虽然这不是
{{}
python中的解决方案(易于翻译成其他语言):
def check(s):
counter = 0
for character in s:
if character == "{":
counter += 1
elif character == "}":
counter -= 1
if counter < 0:
# not valid
return False
if counter == 0:
# valid
return True
else:
return False
答案 3 :(得分:0)
在琴弦中只有一个左大括号和一个右大括号,而右大括号紧跟开口大括号:
^[^\{\}]\{[^\{\}]\}[^\{\}]$
字符串中有任意数量的大括号,但它们没有嵌套(在前一个大括号被关闭之前从未有过另一个大括号),并且它们总是平衡的:
^[^\{\}](\{[^\{\}]\})*[^\{\}]$
通常不能通过正则表达式来解决嵌套问题。