首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果/然后在regexp中

如果/然后在regexp中
EN

Stack Overflow用户
提问于 2018-03-12 13:10:46
回答 5查看 82关注 0票数 1

条件:如果在行的开头有一个数字,从行的末尾得到一个字母。

模式计划:

代码语言:javascript
复制
(?(IF)THEN)

实现:http://sandbox.onlinephpfunctions.com/code/b2ea5d6112e546de704528add3c6f3f5f20a0af4

代码语言:javascript
复制
$a = '645 sdfjh';
preg_match("/(?(^[0-9])[a-z]$)/", $a, $var);
var_dump($var);

错误:编译失败:断言预期后(?)(在偏移量3.

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-03-12 13:40:14

PCRE从其早期的实现开始就支持条件子模式。构建它的主要问题是https://pcre.org/pcre.txt

有四种条件:对子模式的引用、对递归的引用、称为定义的伪条件和断言。

因此,将其更改为正的前瞻性断言并插入.*以移至输入字符串的末尾将使其工作:

代码语言:javascript
复制
^(?(?=\d).*\K[a-z]$)

PHP演示

票数 1
EN

Stack Overflow用户

发布于 2018-03-12 13:19:09

看来IF必须是零宽度断言

代码语言:javascript
复制
(?(?=[0-9]).*([a-z]$))

链接更新

票数 0
EN

Stack Overflow用户

发布于 2018-03-12 13:21:22

代码语言:javascript
复制
<?php
  $a = '645 sdfjh';
  if (preg_match("/^\d.*([a-z])$/", $a, $var)) {
    var_dump($var[1]);   # => "h"
  }

  $a = 'x645 sdfjh';
  if (preg_match("/^\d.*([a-z])$/", $a, $var)) {
    var_dump($var[1]);   # => won't be executed
  }
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49236108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档