我找到了一个PHP的正则表达式模式,可以完成我所需要的完全对立,我想知道如何反转它?
假设我有以下文字:Item_154 ($12)
这个模式/\((.*?)\)/
得到了括号内的内容,但我需要得到“Item_154
”并删除括号内的内容和括号前的空格。
有人知道我该怎么做吗?
显然,正则表达式在我头顶......
答案 0 :(得分:4)
/^([^( ]*)/
匹配从字符串开头到第一个空格或(
的所有内容。
如果您需要匹配的项目中可以包含空格,并且只想要在括号之前删除空格,那么您可以改为使用它:
/^([^(]*?)\s*\(/
答案 1 :(得分:2)
以下内容将匹配任何看似text (...)
的内容,但只返回匹配中的text
部分。
\w+(?=\s*\([^)]*\))
的说明:强>
\w
包含字母数字和下划线,+
表示匹配一个或多个
(?= )
组是积极向前看,说“确认存在但不匹配”
然后我们有空格\s
,*
零或更多
\(
和\)
与文字(
和)
字符匹配(因为它通常是特殊聊天)。
[^)]
是非字符字符,*
为零或更多
希望一切都有意义吗?
答案 2 :(得分:1)
/(.*)\(.*\)/
什么不在()现在将是你的第一场比赛:)
答案 3 :(得分:1)
真正帮助过我的一个网站是http://gskinner.com/RegExr/
它可以让你构建一个正则表达式,然后粘贴一些示例目标/文本来测试它,突出显示匹配。所有可能的正则表达式组件都在右侧列出(基本上)描述函数的工具提示。
答案 4 :(得分:0)
<?php
$string = 'Item_154 ($12)';
$pattern = '/(.*)\(.*?\)/';
preg_match($pattern, $string, $matches);
var_dump($matches[1]);
?>
应该让你Item_154
答案 5 :(得分:0)
如果有帮助,以下正则表达式适用于您的字符串作为替换? : -
\ S * \(。*?\)
以下解释了它在做什么......
空白,任意数量的重复 - \ s *
文字 - \(
任何字符,任意数量的重复,尽可能少 - 。*?
文字 - \)
我发现Expresso(http://www.ultrapico.com/)是学习/编写正则表达式的最佳方式。
HTH
答案 6 :(得分:0)
这是完成整个事情的一次性
$text = 'Item_154 ($12)';
$text = preg_replace('/([^\s]*)\s(\()[^)]*(\))/', $1$2$3, $text);
var_dump($text);
//Outputs: Item_154()
请记住,使用任何PCRE函数都需要相当大的开销,所以如果你在长循环中使用这样的东西并且文本很简单,那么你可以用substr / strpos做这样的事情然后连续最后的事情,因为你知道他们应该是空的。
也就是说,如果您希望学习REGEX并提高效率,我建议您查看:http://rexv.org 我发现那里的PCRE工具非常有用,虽然它在某些方面可能很古怪。特别是,您使用的任何示例应尽可能使用单引号,因为它不能正确使用双引号。
另外,为了真正掌握如何使用正则表达式,我会查看Jeffrey Friedl的Mastering正则表达式ISBN-13:978-0596528126 由于您使用的是PHP,我会尝试获得第3版,因为它有专门针对PHP PCRE的部分。请务必先阅读前6章,因为它们为您提供了处理该特定章节中材料所需的基础。如果你看到第二版便宜的地方,这几乎是相同的核心材料,所以它也是一个很好的购买。