相关疑难解决方法(0)

用正则表达式无法逃避反斜杠?

我正在使用以下正则表达式

^[a-zA-Z0-9\',!;\?\$\^:\\\/`\|~&\" @#%\*\{}\(\)_\+\.\s=-]{1,1000}$
Run Code Online (Sandbox Code Playgroud)

我知道这很难看,但到目前为止,除了不允许反斜杠之外它还有其他目的,因为它已经逃脱,我也试过\\而不是\\\相同的结果.有任何想法吗?

regex

105
推荐指数
4
解决办法
19万
查看次数

为什么SparkSQL在SQL查询中需要两个字面转义反斜杠?

当我从Spark 2.0 REPL(spark-shell)运行下面的Scala代码时,它按照我的意图运行,用简单的正则表达式拆分字符串.

import org.apache.spark.sql.SparkSession

// Create session
val sparkSession = SparkSession.builder.master("local").getOrCreate()

// Use SparkSQL to split a string
val query = "SELECT split('What is this? A string I think', '\\\\?') AS result"
println("The query is: " + query)
val dataframe = sparkSession.sql(query)

// Show the result
dataframe.show(1, false)
Run Code Online (Sandbox Code Playgroud)

给出预期的产出

+---------------------------------+
|result                           |
+---------------------------------+
|[What is this,  A string I think]|
+---------------------------------+
Run Code Online (Sandbox Code Playgroud)

但我感到困惑的是需要使用单个但不是双反斜杠来逃避文字问号(这里表示为四个反斜杠,因为我们当然必须在不使用三重引用时转义Scala中的反斜杠).

我确认我的同事为Spark 1.5编写的一些非常相似的代码使用单个(文字)反斜杠工作得很好.但是,如果我只在Spark 2.1中使用单个字面反斜杠,我会从JVM的正则表达式引擎中获得错误"Dangling meta character '?' near index 0".我知道这意味着问号没有正确转义,但它闻起来像反斜杠本身必须首先转换Scala 然后 SQL.

我猜这可以用于将控制字符(如换行符)插入SQL查询本身.如果这已经从Spark 1.5改为2.1,我只是感到困惑? …

apache-spark apache-spark-sql apache-spark-2.0

5
推荐指数
1
解决办法
1642
查看次数