V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jookr
V2EX  ›  问与答

求一个简单正则表达式 php 的

  •  
  •   jookr · 2015-03-10 00:50:21 +08:00 · 1776 次点击
    这是一个创建于 3574 天前的主题,其中的信息可能已经有所发展或是发生改变。

    字符串'啊啊abc啊啊'

    表达式如何写才能判断是否只包含b一个字符?
    b的前后如果有数字或者字母都为false

    第 1 条附言  ·  2015-03-10 14:21:14 +08:00
    自己搞定了
    /(?<![0-9a-z])$val(?![0-9a-z])/is
    6 条回复    2015-03-10 09:57:49 +08:00
    jookr
        1
    jookr  
    OP
       2015-03-10 00:55:18 +08:00
    能控制判断指定字符后面不能跟字符或者数字了
    echo preg_match("/b(?![0-9a-z])/ism",'啊啊abc啊b啊') ? "匹配" : '不匹配';

    但是前面就不懂怎么控制了
    abelyao
        2
    abelyao  
       2015-03-10 00:57:32 +08:00
    描述不清楚,有歧义:
    1. 整个字符串只有一个 b 字符?例如 'b'
    2. 整个字符串中只能有 b 这个字符?例如 'bbbbbbb'
    3. 前后可以是汉字但不能是字母或数字?例如 '丑B不约'
    4. 前后能否包含符号?
    5. 前后能否包含中日韩的生僻汉字?
    Tianpu
        3
    Tianpu  
       2015-03-10 01:34:42 +08:00 via iPhone
    !preg_match('/[0-9a-z]b/i',$var) && !preg_match('/b[0-9a-z]/i',$var)
    Tianpu
        4
    Tianpu  
       2015-03-10 01:36:22 +08:00 via iPhone
    好像有问题,主要是需求描述也有问题,无法最终修正。
    rrfeng
        5
    rrfeng  
       2015-03-10 09:41:36 +08:00
    @jookr
    前置零宽断言和后置零宽断言不都是一起讲的吗?为什么只会其中一个……

    另外没特殊需求的话用 /[^0-9a-zA-Z]b[^0-9a-zA-Z]/ 也行吧
    b821025551b
        6
    b821025551b  
       2015-03-10 09:57:49 +08:00
    @rrfeng 看LZ描述,还要考虑汉字吧,[x00-xff]
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1101 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 18:53 · PVG 02:53 · LAX 10:53 · JFK 13:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.