【问题标题】:regular expression issue if string contain \n [duplicate]如果字符串包含 \n [重复],则正则表达式问题
【发布时间】:2017-05-19 05:37:42
【问题描述】:

我正在尝试使用正则表达式获取标题的值。这个正则表达式有什么问题。比赛即将结束。

 let strToCheck = "<title>youtube \n </title>"
 let rgx = "<title(.*?)>(.*?)</title>"

 let rx = try NSRegularExpression(pattern: rgx, options: [.caseInsensitive])

 if let match = rx.firstMatch(in: strToCheck, options: [], range: 
            NSMakeRange(0, string.characters.count)) {

  }

【问题讨论】:

    标签: regex swift


    【解决方案1】:

    最初的问题是因为您没有转义/,这使您的正则表达式中断。您需要在斜杠前添加\,如下所示:

    <title(.*?)>(.*?)<\/title>
    

    Demo url

    正如Wiktor Stribiżew 在他下面的评论中解释的那样,Swift 不需要转义斜杠,我已经更新了正则表达式以匹配新行的情况,如下所示:

    <title(.*?)>(?s).*?</title>
    

    Demo URL

    注意:在演示中,/ 有一个转义字符,但 Swift 不需要此字符

    【讨论】:

    • 绝对没有必要在快速正则表达式模式中转义正斜杠。多行标志仅重新定义此处未使用的锚点的行为。
    • 哦,我不知道 swift 感谢您的澄清! ,但我已经更新了我的答案,以便匹配新行案例(如果有的话)
    • 更新没有使解决方案正确,这是一个糟糕的模式。请考虑删除您的错误答案或修复。永远不要使用(.|\n+)*? - 它是一个很棒的性能杀手。
    • 现在呢?
    • 现在好多了。
    猜你喜欢
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2022-12-07
    • 2020-08-25
    • 2019-10-07
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    相关资源
    最近更新 更多