首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >要作为正则表达式传递的转义字符串

要作为正则表达式传递的转义字符串
EN

Stack Overflow用户
提问于 2012-08-02 17:06:53
回答 2查看 11.5K关注 0票数 25

我想创建一个函数,用于创建匹配输入端给定的任意字符串的正则表达式。例如,当我向它提供123$时,它应该从字面上匹配"123$",而不是字符串末尾的123

代码语言:javascript
复制
def convert( xs: String ) = (xs map ( x => "\\"+x)).mkString                 

val text = """ 123 \d+ 567 """                                                
val x = """\d+"""                                                            
val p1 = x.r                                                                 
val p2 = convert(x).r                                                        

println( p1.toString )                                                       
  \d+ // regex to match number                                               

println( ( p1 findAllIn text ).toList )                                      
  List(123, 567) // ok, numbers are matched                                  

println( p2.toString )                                                       
  \\\d\+ // regex to match "backshash d plus"                                

println( ( p2 findAllIn text ).toList )                                      
  List() // nothing matched :(                                               

所以最后一个findAllIn应该在文本中找到\d+,但是它没有。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-02 17:27:47

您可以使用Java的Pattern类将字符串转义为正则表达式。请参阅http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#quote%28java.lang.String%29

例如:

代码语言:javascript
复制
scala> Pattern.quote("123$").r.findFirstIn("123$")
res3: Option[String] = Some(123$)
票数 32
EN

Stack Overflow用户

发布于 2017-05-29 01:33:35

为了引起对Harold L上面的评论的更多关注,如果你想用Scala库来做这件事,你可以使用:

代码语言:javascript
复制
import scala.util.matching.Regex
Regex.quote("123$").r.findFirstIn("123$")
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11774306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档