在特定字符之前,之后和之间提取文本

Mik*_*ike 1 coldfusion coldfusion-9

在我的数据库中,一些关键字被"/"和"\"字符包围.

在应用程序端,在ColdFusion中,我试图提取和分离出现在"/"和"\"包围的文本字符串之前或之后的文本

所以说我有一句话:我的胡扯有一个名字,它是/ HOMER \

  1. 我想把两者分开,所以我有一个变量,它有一个字符串我的baloney有一个名字,它是
  2. 和另一个没有"/"和"\"的HOMER变量

同样,"/"和"\"可以出现在一串文本之前或之后,如下所示:

/Ash\ Gotta catch’em all
Run Code Online (Sandbox Code Playgroud)

.

/Nike\ Just do it.
Run Code Online (Sandbox Code Playgroud)

.

Impossible is nothing. /Adidas\
Run Code Online (Sandbox Code Playgroud)

.

微软已经面临与刚刚推出的Windows相关的诉讼,一家操作系统技术设计师指责微软剥夺了其"瓷砖"专利.

SurfCast昨天在缅因州一家美国地方法院提起的诉讼中表示,微软侵犯了其四项专利中的一项 - 第6,724,403号 - 其中包括"制造,使用,销售和提供销售设备和软件产品",SurfCast覆盖专利.这包括使用Windows Phone 7和Windows Phone 8操作系统的移动设备以及使用/ Windows 8的PC

如何提取和分隔出现在"/"和"\"包围的文本字符串之前或之后的文本?

Pet*_*ton 6

如果单独的文本始终位于开头/结尾,您可以像这样简单地使用ListFirst:

<cfset First = ListFirst(Text,'/\') />
<cfset Last = ListLast(Text,'/\') />
Run Code Online (Sandbox Code Playgroud)

而且你将两个部分都放在不同的变量中.要找出哪个是哪个,你需要做一个Left(Text,1)来确定原始文本是否以/.


否则,您可以使用rematch提取/ ...\text :

<cfset Slashes = rematch('/[^\\]+(?=\\)',Text) />
Run Code Online (Sandbox Code Playgroud)

返回一个以/- 开头的匹配数​​组- 你无法避免在CF的正则表达式中捕获第一个斜杠(没有lookbehind支持),但你可以使用substring删除它:

<cfset Slashes[x] = Slashes[x].substring(1) />
Run Code Online (Sandbox Code Playgroud)

(使用1而不是x只有一个结果,否则你需要一个循环.)


要获得没有此值的文本,您可以使用如下的简单替换:

<cfset Unslashed = replace(Text,'/#Slashes[x]#\','') />
Run Code Online (Sandbox Code Playgroud)