在NSString

时间:2017-07-30 03:26:44

标签: ios regex string cocoa-touch nsstring

我需要检查是否匹配的括号出现在可能有表情符号的字符串中(如:):()。例如,"(:)())()""(abcd)()ghijk)((mnop)qert)"

我已使用模式"^[:\\(|:\\)]"检查表情符号,"\\([^()]*\\)"检查匹配的括号是否存在,但未检测到它们。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

这个问题的真正简单的解决方案是计算括号,尽管扩展的正则表达式可以处理它,但尝试用正则表达式解决它是很困难的。这是一个简单算法的草图:

  1. openParenthesisCount设为0
  2. 迭代字符串:
    1. 如果当前字符为(增量openParenthesisCount
    2. 如果当前字符为)递减openParenthesisCount,如果计数为负,则失败(关闭太多)
    3. 如果当前字符为:,则前瞻并跳过下一个字符(如果它是括号)(跳过表情符号)
  3. 如果openParenthesisCount为零=>成功
  4. HTH

答案 1 :(得分:0)

据我所知,你想要匹配一个字符串,当且仅当它包含匹配的括号时,忽略字符串中每次出现的“:)”和“:(”(如果有的话)。

所以,试试这个:

^((?!:).)*\(.*(?<!:)\).*



它将匹配以下字符串:

  • ()
  • (ABD)
  • (())(
  • (:))
  • (:(:))
  • (:)())()
  • (ABCD)()ghijk)((MNOP)qert)
  • (ABC):
  • (:ABC)

但不符合以下条件:

  • )(
  • (:)
  • (:(
  • :(:)
  • :()
  • (:)
  • :()(:)
  • (ABC
  • ABC)
  • (ABC:)
  • :( ABC)