php 一个正则表达式

影帆 2011-09-15 01:40:39
怎么样使用正则匹配一个字符串取非?[^p]

例如:有这样一个字符串 “# #123 # #哈哈哈哈#”需要通过一个正则得到以 #开始,以 #结束,中间必须有字符但是不能是#

通过match_all希望得到如下结果:
1) #123 #
2) #哈哈哈哈#
...全文
151 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
影帆 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 foolbirdflyfirst 的回复:]

你这个/A[^A]A/,^只能排除单个字符
以正则表示应该是/A(?:(?!A).)*A/,A可以是一个字符串
[/Quote]


谢谢,这个很好
lantianxin520520 2011-09-15
  • 打赏
  • 举报
回复
不太清楚 呵呵
kazakh 2011-09-15
  • 打赏
  • 举报
回复
$s='abac#123 # slskf#哈哈 # ss# ss';
preg_match_all('/\#[\w\W]+?\#/',$s,$e);
var_dump($e);
joking520 2011-09-15
  • 打赏
  • 举报
回复
帮顶了。学习中……

如果是要将里面的字符过滤掉直接丢掉,毫无疑问,用正则。
如果是要将得到的字符串让他工作起来,那我觉得没必要非得正则来做,个人觉得正则不是一个好办法。

根据业务逻辑的不同,有很多种方法:
1、如果数据可控(意思就是有规律的),那我就用JSON来做
2、如果数据不可控,那我干脆点,切割成数组来做,如下:

//楼主是想取得两者之间的字符串吧
$str = "# #123 # #哈哈哈哈#";
$strArr = explode("#",$str);
//将数组最后一个单元弹出
$strArr = array_pop($strArr);
//将数组开头的单元移出数组
$strArr = array_shift($strArr);
//过滤空数组
$strArr = array_filter($strArr);


不过如果说到效率问题,我说不清楚那个快,但是即使用正则匹配了,之后要用得到的字符串来做什么,估计也得用数组
foolbirdflyfirst 2011-09-15
  • 打赏
  • 举报
回复
你这个/A[^A]A/,^只能排除单个字符
以正则表示应该是/A(?:(?!A).)*A/,A可以是一个字符串
foolbirdflyfirst 2011-09-15
  • 打赏
  • 举报
回复
那"#&;##"这个你想要得到什么结果?
影帆 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 foolbirdflyfirst 的回复:]

PHP code
$str= "# #123 # #哈哈哈哈#232#";
$reg ='~(?<=&#35;)(?:(?=[^\s]+))(.*?)(?=&#35;)~';
preg_match_all($reg,$str,$m);
print_r($m[0]);

……
[/Quote]

写的不错,但是不能满足我的需求,可能我说的不太明白
例如"#&;##" 假设A = # ,我要实现的就是 /A[^A]A/
通过你上面的表达式是得不到这个结果的
foolbirdflyfirst 2011-09-15
  • 打赏
  • 举报
回复
左右(?<=)和(?=)是为了捕获那些交叉的#,如果实际情况不会有这个问题,就不用,效率会好很多。
foolbirdflyfirst 2011-09-15
  • 打赏
  • 举报
回复
$str= "# #123 # #哈哈哈哈#232#";
$reg ='~(?<=#)(?:(?=[^\s]+))(.*?)(?=#)~';
preg_match_all($reg,$str,$m);
print_r($m[0]);
zhangbolang888 2011-09-15
  • 打赏
  • 举报
回复
帮顶了
正则表达式经典实例》讲解了基于8种常用的编程语言使用正则表达式的经典实例。书中提供了上百种可以在实战中使用的实例,以帮助读者使用正则表达式来处理数据和文本。对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误以及完成一些常见的任务,《正则表达式经典实例》给出了涉及基于C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET等编程语言的解决方案。《正则表达式经典实例》的读者对象是对正则表达式感兴趣的软件开发人员和系统管理员。 《正则表达式经典实例》旨在教会读者很多新的技巧以及如何避免语言特定的陷阱,读者可以通过《正则表达式经典实例》提供的实例解决方案库来解决实践中的复杂问题。 《正则表达式经典实例》:每个程序员都会遇到需要使用正则表达式的情况,但是要用好正则表达式却并不容易。《正则表达式经典实例》提供了100多个实例,以帮助读者使用正则表达式处理数据和文本。即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,《正则表达式经典实例》对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET的实例。 《正则表达式经典实例》主要包括以下内容: 通过一个精练的教程理解正则表达式的基本原理和技巧; 在不同的编程语言和脚本语言中有效使用正则表达式; 学习如何对输入进行合法性检查和格式化; 处理单词、文本行、特殊字符和数值; 学习如何在uRL、路径、标记语言和数据交换中使用正则表达式; 学习更高深的正则表达式特性中的微妙之处; 理解在不同语言中正则表达式的API、语法和行为之间的区别; 创建更好的正则表达式来满足个性化的需求。 使用8种编程语言的详细解决方案,包括一个正则表达式简明教程

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧