Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
165 views
in Technique[技术] by (71.8m points)

Regex PHP match character only if not preceded or followed by same character.

so I am trying to match a back tick ` but only when it is not more than one in a row:

`test` // matches
``test`` // does NOT match

// does NOT match
```java
    test
```

BUT it needs to also match if is at the beginning of the string or end, so all three must match.

`matches`

Text `matches`

Text `matches`EOL

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

UPDATE 3

The regex below matches exactly as the previous one, but consumes the backtick ` avoiding that an ending backtick is considered a starting backtick when the regex engine searchs for the next one.

(?<!`)`([^`

]+)`(?!`)

The correct behaviour (extract only the text wrapped inside single backticks) is keeped using a capturing group `([^` ]+)`.

Use it with preg_match_all, try this online php demo.

Legenda:

  • (?<!`)` a backtick not preceded another one
  • `([^` ]+)` a capturing group that matches everything that is not a backtick or a newline (CR or LF)
  • `(?!`) a backtick not followed by another one

Updated Online Demo


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...